生产代码中的 System.Diagnostics. Debug. WriteLine

我可能已经知道了,但我不确定,也没有看到记录。

我用系统。诊断。调试。在开发过程中,WriteLine 经常能够在我调试代码时跟踪变量或异常的更改。这意味着使开发和理解在开发过程中发生的事情变得更加容易。我通常要么注释掉代码,要么删除它,当我去生产。

我想知道如果我忘记注释掉代码会发生什么。例如,假设在开发周期期间,我正在跟踪可能使用 Debug 将连接测试记录到输出窗口的错误信息。写线。这显然是可以的,同时发展,但我想知道,如果我去现场,如果有一个风险在这里。是否有人可以将调试器附加到我的活动可执行文件并捕获这个输出?还是只在 VisualStudio 中生成输出?

那么当我们从调试切换到发布的时候呢?如果我们为发布而编译,编译器会忽略这些代码吗?

22622 次浏览

只有在定义了“ DEBUG”条件编译符号时,才会出现 System.Diagnostics.Debug 方法调用。默认情况下,“ DEBUG”符号仅为调试版本定义。

支持 忽略呼叫 这些方法,除非“ DEBUG”是 定义为条件编译 符号。

Debug 类中的所有成员都用 条件属性标记,因此调用站点不会被编译成发布版本。

因为 DEBUG 方法都有条件(“ DEBUG”)属性,所以如果你从 DEBUG 切换到 Release,你不必担心这个问题,因为对这些方法的调用将被删除(和其他版本的优化一起)。

Debug 的几乎所有成员都用 ConditionalAttribute 标记。像 C # 这样的编译器会在发布构建期间跳过对这些方法的调用,因此您是安全的。

模式信息: Http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx

如果不使用 /d:DEBUG选项或 #define DEBUG进行编译,您的 WriteLine 调用将不会实际出现在您的发布代码中; 任何第三方都无法从这些调用中恢复任何信息,因为它们实际上在发布版本中不存在。

详情请浏览这里: MSDN 上的调试类(System.Diagnostics)

调试信息只有在 调试模式中运行时才可见。在 释放模式中,没有调试语句是可见的(如果您希望这些语句在发布模式中可见,可以使用 崔思而不是 调试)。

Http://support.microsoft.com/kb/815788