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

Dav*_*vid 63 .net debugging system.diagnostics

我可能已经知道了这一点,但我不确定,我也没有记录.

我在开发过程中经常使用System.Diagnostics.Debug.WriteLine来跟踪变量或异常的变化,因为我正在调试代码.这意味着只有在开发过程中才能更容易地开发和理解发生的事情.我通常要么注释掉代码,要么在我去制作时将其删除.

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

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

Phi*_*ney 75

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

  • 我希望每次同事发送带有Debug版本的生产安装程序时,我都会收到一美元. (26认同)

Mit*_*eat 17

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

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


Age*_*191 11

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

  • 更具体地说,不要定义`DEBUG`.如果您创建"Release"构建(最小符号,优化代码等)但定义`DEBUG`,仍然会调用`Debug`方法,对吧? (2认同)

Mar*_*arc 7

只有在调试模式下运行时,调试信息才可见.在Release模式下,不会显示Debug语句(如果希望在Release模式下显示这些语句,则可以使用Trace而不是Debug).

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