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

时间:2009-10-21 13:55:33

标签: .net debugging system.diagnostics

我应该已经知道了,但我不确定,我也没有记录。

我在开发过程中经常使用System.Diagnostics.Debug.WriteLine,以便在我调试代码时跟踪变量或异常的更改。这是为了让开发和理解在开发过程中更容易 。我通常要么注释掉代码,要么在我投入生产时将其删除。

我想知道如果我忘记评论代码会发生什么。比如说,在开发周期中,我正在跟踪可能使用Debug.Write Line将连接sting到输出窗口的错误信息。这显然可以在开发时使用,但我想知道当我上线时,如果这里存在风险。有人可以将调试器附加到我的实时可执行文件并捕获此输出吗?或者它只是在Visual Studio中产生输出?

当我们从调试切换到发布时呢?如果我们编译发布版本,编译器是否会忽略此代码?

6 个答案:

答案 0 :(得分:75)

Debug类中的所有成员都标有ConditionalAttribute,因此调用站点不会被编译为Release版本。

答案 1 :(得分:17)

仅当定义“DEBUG”条件编译符号时,才会出现

System.Diagnostics.Debug方法调用。默认情况下,“DEBUG”符号仅为调试版本定义。

  

支持的编译器   ConditionalAttribute忽略对此的调用   这些方法除非“DEBUG”   定义为条件编译   符号

答案 2 :(得分:11)

由于Debug方法都有[Conditional(“DEBUG”)]属性,如果从Debug切换到Release,你将不必担心它,因为对这些方法的调用将被删除(同时发布版本的其他优化。)

答案 3 :(得分:7)

调试信息仅在您以调试模式运行时可见。在发布模式中,不会显示调试语句(如果希望在发布模式下显示这些语句,则可以使用跟踪而不是调试

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

答案 4 :(得分:2)

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

此处有更多详情:Debug Class (System.Diagnostics) on MSDN

答案 5 :(得分:1)

几乎所有Debug成员都标有ConditionalAttribute。像C#这样的编译器会在Release版本中跳过对这些方法的调用,所以你是安全的。

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