【问题标题】:C# release version has still .pdb fileC# 发布版本仍有 .pdb 文件
【发布时间】:2011-01-23 04:24:31
【问题描述】:

我想部署用 C# 完成的应用程序的发布版本。

当我使用Release 配置构建时,我仍然可以看到生成了.pdb 文件,这意味着我的应用程序仍然可以调试。这也意味着在我的代码中某处存在一些调试信息,这会减慢它的速度。

如果这是真的,我怎样才能完全抑制二进制文件中产生的任何调试信息?你也知道发布.pdb的原因吗? Release 配置检查了Optimize code,并且只定义了TRACE 常量,没有定义DEBUG

感谢您的协助。

【问题讨论】:

  • @meagar 您应该保留 .pdb 文件以供将来参考,即使您不希望将它们打包在最终安装程序 MSI 中以发送给客户。当某些事情以未处理的方式爆发并导致您的应用程序在生产环境中崩溃时,Pdb 文件将是您唯一的希望。 pdb 文件对于使用 windows SDK 附带的 winDbg 工具调试故障转储文件非常有用。正如您正确提到的那样,OPTIMIZED 代码标志应保持选中状态。
  • @RasikBihariTiwari 我不在乎。我没有问这个问题。
  • 对不起@meagar!我应该改为向 Abruzzo Forte 讲话。带来不便敬请谅解。现在是早上 6 点,看来我还在困;)

标签: c# pdb-files release-mode


【解决方案1】:

默认也是为发布版本生成 PDB。这是一项功能,您不应禁用它。生成 PDB 意味着您可以在调试时获得更多信息。 PDB 文件的存在不会以任何方式影响代码的性能。

【讨论】:

  • 嗨,布赖恩!谢谢!我对此持怀疑态度,但似乎每个人都同意这一点!
  • 所以每个人都同意 PDB 文件不会降低性能?有没有人做过任何测试来确认?
  • @theJerm 应用在运行时不会读取 PDB。所以除了它们占用的磁盘空间之外,除非你在调试,否则没有任何开销。
  • @BrianRasmussen:PDB 在逆向工程中是否有用?我混淆了我的发布版本。我还应该在输出中生成 PDB 吗?
  • 抱歉,我不同意,发布版本应该是这样的:发布,没有调试,也没有调试运行时依赖项。
【解决方案2】:

您可以在 Build -> Advanced... -> Debug info: 下的项目属性中控制 pdb / 符号生成。选项有:

  • (无符号信息)
  • full(会生成一个.pdb,并在程序集中嵌入一些符号信息)
  • pdb-only(将生成 .pdb 但程序集不受影响)

更多信息请参见http://msdn.microsoft.com/en-us/library/8cw0bt21%28VS.80%29.aspx

强烈建议您选择 pdb-only 选项,选择 none 选项,因为它仍然会为您提供一些符号信息而不影响程序集 - 您可能会发现这是您在发布版本中的当前设置。

【讨论】:

    【解决方案3】:

    您不必将 .PDB 与您的发布部署一起提供,但它们对保留很有用 - 例如,您可以使用计算机上的 PDB 远程调试在不同计算机上运行的代码以获取行号发生异常的地方。

    如果不使用 .PDB,行号和文件名不会包含在堆栈跟踪中,因此调试它们会变得更加困难。

    【讨论】:

    • 谢谢!这很有用!我没有意识到每个异常对象的 StackTrace 中都不存在行号!
    【解决方案4】:

    如果要禁用 pdb 文件生成,则需要在单击位于Build 选项卡下方的“"Advanced..." 按钮”后使用项目属性中可用的"Advanced build settings" 对话框。

    Output - Debug info: 设置为None 用于发布构建配置,不会生成任何pdb 文件。

    【讨论】:

    • 你也可以使用MSBuild.exe YourProject.csproj /p:DebugSymbols=false /p:DebugType=None
    【解决方案5】:

    让编译器生成一个.pdb 文件与让它优化代码并不相互排斥。

    有关此主题的更多信息,请阅读这些blogentries

    【讨论】:

    • 是的,但是在程序集中嵌入调试信息也会对性能产生影响(根据 Microsoft)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2014-01-10
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多