![]() |
1
21
首选方法是实际使用条件属性来包装调试调用,而不是使用编译器指令。#ifs可能会变得棘手,并可能导致奇怪的构建问题。 使用条件属性的示例如下(在C#中,但在VB.NET中也适用):
当您在没有设置DEBUG标志的情况下编译时,对WriteDebug的任何调用都将被删除,就像假设DEBUG发生的那样。Write()。 |
![]() |
2
5
检查 Debug.Write 方法。它标有
属性。 MSDN帮助 ConditionalAttribute 声明:
构建配置是否有发布或调试标签并不重要,重要的是其中是否定义了debug符号。 |
![]() |
3
1
我也读过这篇文章,它让我相信,当DEBUG没有定义时,ConditionalAttribute在System上声明。调试函数会导致编译器完全省略此代码。我认为TRACE也是如此。也就是说,系统。诊断。调试函数必须具有Debug和TRACE的ConditionalAttribute。我的那个假设是错误的。单独的Trace类具有相同的函数,这些函数根据Trace常量定义ConditionalAttribute。 从系统。诊断。调试: _ 公共共享子写入(_ 消息为字符串_ ) 从系统。诊断。跟踪: _ 公共共享子写线(_ 消息为字符串_ ) 看来我最初的假设是正确的,那个系统。诊断。Debug(或system.Digrations.Trace)语句实际上不包含在编译中,就像它们包含在#if Debug(或#if Trace)区域中一样。 但我也从你们那里了解到,并验证了RELEASE构建本身并不能解决这个问题。至少对于Silverlight项目,它仍然有点不稳定,你需要进入“高级编译选项…”,并确保未定义DEBUG。 我们跳了起来。NET 1.1/VS2003到。NET 3.5/VS2008,所以我认为其中一些过去的工作方式不同,但也许在2.0/VS2005中发生了变化。 |
![]() |
4
1
我所做的是将对Debug的调用封装在我自己的类中,并添加一个预编译器指令
|
![]() |
5
1
正如您所说,使用DEBUG编译器符号实际上会从程序集中省略代码。 我相信这个系统。诊断。调试。即使您已在发布模式下构建,写入也将始终输出到附加的调试器。根据 MSDN article :
如果你不想 任何 输出时,您需要将调用打包到Debug。像Juan说的那样用DEBUG常量写:
|
![]() |
6
1
要选择是要编译还是删除调试信息, 在项目的属性窗口中进入“构建”选项卡。 选择正确的配置(活动/发布/调试/全部),并确保 如果你想要信息,请检查“调试常数”, 或者如果不选中,则取消选中。 应用更改并重建 |
![]() |
7
-6
根据我的经验,在VB.NET中选择调试和发布没有什么区别。您可以将自定义操作添加到这两种配置中,但默认情况下,我认为它们是相同的。 使用Release肯定不会删除系统。诊断。调试。写陈述。 |
![]() |
George S. · 是否存在基于元组的控制流语句内部表示? 7 年前 |
![]() |
FlatAssembler · 在x86程序集中计算exp(x) 7 年前 |
![]() |
cib · 即时编译和动态编译有什么区别? 7 年前 |
![]() |
Artemis · 寄存器与指令之间的差异 7 年前 |
![]() |
Sam · 了解go工具编译和链接命令 7 年前 |