我应该已经知道了,但我不确定,我也没有记录。
我在开发过程中经常使用System.Diagnostics.Debug.WriteLine,以便在我调试代码时跟踪变量或异常的更改。这是为了让开发和理解在开发过程中更容易 。我通常要么注释掉代码,要么在我投入生产时将其删除。
我想知道如果我忘记评论代码会发生什么。比如说,在开发周期中,我正在跟踪可能使用Debug.Write Line将连接sting到输出窗口的错误信息。这显然可以在开发时使用,但我想知道当我上线时,如果这里存在风险。有人可以将调试器附加到我的实时可执行文件并捕获此输出吗?或者它只是在Visual Studio中产生输出?
当我们从调试切换到发布时呢?如果我们编译发布版本,编译器是否会忽略此代码?
答案 0 :(得分:75)
Debug类中的所有成员都标有ConditionalAttribute,因此调用站点不会被编译为Release版本。
答案 1 :(得分:17)
System.Diagnostics.Debug
方法调用。默认情况下,“DEBUG”符号仅为调试版本定义。
支持的编译器
ConditionalAttribute
忽略对此的调用 这些方法除非“DEBUG” 定义为条件编译 符号
答案 2 :(得分:11)
由于Debug方法都有[Conditional(“DEBUG”)]属性,如果从Debug切换到Release,你将不必担心它,因为对这些方法的调用将被删除(同时发布版本的其他优化。)
答案 3 :(得分:7)
调试信息仅在您以调试模式运行时可见。在发布模式中,不会显示调试语句(如果希望在发布模式下显示这些语句,则可以使用跟踪而不是调试)
答案 4 :(得分:2)
如果您在没有/d:DEBUG
选项或#define DEBUG
的情况下进行编译,您的WriteLine调用将不会实际出现在您的发布代码中;任何第三方都无法从这些调用中恢复任何信息,因为它们在发布版本中确实不存在。
答案 5 :(得分:1)
几乎所有Debug成员都标有ConditionalAttribute。像C#这样的编译器会在Release版本中跳过对这些方法的调用,所以你是安全的。
模式信息: http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx