【问题标题】:System.Diagnostics.Debug.WriteLine in production code生产代码中的 System.Diagnostics.Debug.WriteLine
【发布时间】:2010-12-08 17:30:31
【问题描述】:

我可能已经知道这一点,但我不确定,也没有看到它记录在案。

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

我想知道如果我忘记注释掉代码会发生什么。例如,在开发周期中,我正在跟踪错误信息,这些错误信息可能会使用 Debug.Write Line 将连接字符串记录到输出窗口。这在开发时显然没问题,但我想知道当我上线时,这里是否存在风险。有人可以将调试器附加到我的实时可执行文件并捕获此输出吗?还是它只在 Visual Studio 中产生输出?

当我们从调试切换到发布时呢?如果我们为发布而编译,编译器会忽略此代码吗?

【问题讨论】:

  • 谢谢所有回答的人。 @Phil Devaney、@Mitch Wheat 和 @Agent_9191 都以不同的措辞给出了几乎相同的答案,所以我投票给你们,但我只能接受一个答案。我会选择谁先回答,但这看起来是 nMitch 和 Phil 之间的平局,所以没有冒犯,Mitch,但我将把它交给 Phil,他的分数较低。
  • 对于搜索以下Debug.WriteLine in release build 的其他人可能也很有趣。

标签: .net debugging system.diagnostics


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我希望每次同事发出带有调试版本的生产安装程序时,我都能得到一美元。
    【解决方案3】:

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

    【讨论】:

    • 更具体地说,不要定义DEBUG。如果您创建“发布”版本(最少符号、优化代码等)但定义 DEBUG,仍将调用 Debug 方法,对吧?
    【解决方案4】:

    几乎所有 Debug 成员都标有 ConditionalAttribute。诸如 C# 之类的编译器将在 Release 构建期间跳过对这些方法的调用,因此您是安全的。

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        调试信息仅在您以调试模式运行时可见。在 Release 模式 中不会看到任何 Debug 语句(如果您希望这些语句在 Release 模式下可见,可以使用 Trace 而不是 Debug) .

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-15
          • 2011-01-04
          • 1970-01-01
          • 1970-01-01
          • 2011-05-21
          • 1970-01-01
          • 2018-11-13
          相关资源
          最近更新 更多