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

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

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

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

有帮助吗?

解决方案

Debug类中的所有成员都标有 ConditionalAttribute ,因此呼叫站点不会被编译为发布版本。

其他提示

System.Diagnostics.Debug 方法调用仅在“DEBUG”时出现。条件编译符号已定义。默认情况下,“DEBUG”是指“DEBUG”。 symbol仅为调试版本定义。

  

支持的编译器    ConditionalAttribute 忽略调用   除非“DEBUG”,否则这些方法除外。是   定义为条件编译   符号

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

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

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

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

此处提供更多详细信息:调试类(System.Diagnostics)在MSDN上

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top