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

我应该可能已经知道这一点,但我不知道,我没有看到它的logging。

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

我想知道如果我忘记评论代码会发生什么。 比方说,在开发周期中,我使用Debug.Write Line跟踪可能logging连接到输出窗口的错误信息。 这显然是好的,而我正在开发,但我想知道如果我去住,如果这里有风险。 有人可以将debugging器附加到我的活动可执行文件并捕获此输出? 还是只在Visual Studio中产生输出?

当我们从debugging切换到发布时呢? 如果我们编译发布,这个代码会被编译器忽略吗?

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

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

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

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

debugging信息仅在debugging模式下运行时才可见。 在发布模式下,不会显示debugging语句(如果希望这些语句在发布模式下可见,则可以使用Trace而不是Debug )。

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

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

更多细节在这里: MSDN上的debugging类(System.Diagnostics)

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

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