【问题标题】:.NET: Running a program with debug information.NET:运行带有调试信息的程序
【发布时间】:2011-04-14 15:25:37
【问题描述】:

众所周知,在“调试模式”(而不是“发布模式”)下编译程序可能会导致性能下降。

但有时获取一些调试信息可能会很有用。例如,当我们的程序在生产服务器上运行并发生异常时,将有助于在异常时记录堆栈跟踪。

我发现这是可能的,在“发布模式”下编译代码并将 *.pdb 文件与二进制文件放在同一个文件夹中。

任何人都知道附加 pdb 文件是否会导致任何性能问题。

谢谢

【问题讨论】:

  • 这是一个很好的做法,因为如果您确实需要调试生产二进制文件,您有调试符号,这让生活变得更轻松!

标签: .net debugging compiler-construction


【解决方案1】:

它不会导致任何性能问题,因为 DLL 已在发布模式下编译。当异常被抛出时,.NET VM 知道你的堆栈跟踪,包括抛出异常时堆栈的每个方法中运行的指令。包含 pdb 文件只是提供了一种将这些数据映射到实际文件名和行号的方法。

在堆栈跟踪中包含这些额外数据导致的任何性能差异可能会因首先引发异常的开销而相形见绌。

【讨论】:

    【解决方案2】:
    • 编译到发布模式 + 生成 .pdb 对性能没有影响
    • 将 .pdb 文件与 dll 放在一起以查找调试信息仅在出现异常时对性能的影响非常小 - 这可以忽略。这将是从 pdb 映射中查找堆栈信息的开销。

    【讨论】:

      【解决方案3】:

      它不会对性能产生负面影响,但确实会暴露您可能不希望出现的安全问题。具有调试符号对于在发生异常时捕获漂亮的堆栈跟踪很有用,但它不应该是您的默认发送模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-30
        • 1970-01-01
        • 2012-02-11
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        相关资源
        最近更新 更多