为什么 Visual Studio 2005 在发布时编译时会生成 .pdb 文件?我不会调试发布版本,那么为什么会生成它们呢?

最佳答案

因为没有 PDB 文件,就不可能通过地址级调试以外的任何方式来调试“发布”构建。 优化确实对您的代码产生了影响,如果出现问题(例如抛出异常),则很难找到罪魁祸首。甚至设置断点也极其困难,因为源代码行无法与生成的汇编代码一一对应(或什至以相同的顺序)。 PDB 文件可以帮助您和调试器,使事后调试变得更加容易。

您指出,如果您的软件已准备好发布,那么您应该在那时完成所有调试。虽然这当然是真的,但有几个要点需要牢记:

  • 您还应该使用“发布”版本测试和调试您的应用程序(在发布之前)。这是因为打开优化(在“调试”配置下默认禁用它们)有时会导致出现细微的错误,否则您不会发现这些错误。在进行此调试时,您将需要 PDB 符号。
  • 客户经常报告仅在“理想”条件下才会出现的边缘情况和错误。这些东西在实验室中几乎不可能重现,因为它们依赖于该用户机器的一些古怪配置。如果他们是特别有帮助的客户,他们会报告抛出的异常并为您提供堆栈跟踪。或者他们甚至会让你借用他们的机器远程调试你的软件。在任何一种情况下,您都需要 PDB 文件来帮助您。
  • 应始终在启用优化的“发布”版本上进行分析。再一次,PDB 文件派上用场,因为它们允许将被分析的汇编指令映射回您实际编写的源代码。

  • 您无法在编译后返回并生成 PDB 文件。* 如果您不在构建期间创建它们,您就失去了机会。创建它们没有任何伤害。如果您不想分发它们,您可以简单地从二进制文件中省略它们。但是,如果您后来决定想要它们,那您就不走运了。 最好始终生成它们并存档副本,以防万一您需要它们。

    如果你真的想关闭它们,那总是一个选择。在项目的“属性”窗口中,将要更改的任何配置的“调试信息”选项设置为“无”。

    但是请注意,“调试”和“发布”配置默认使用不同的设置来发出调试信息。您将希望保留此设置。对于 Debug 版本,“Debug Info”选项设置为“full”,这意味着除了 PDB 文件之外,调试符号信息也被嵌入到程序集中。您还可以获得支持编辑并继续等酷功能的符号。在 Release 模式下,选择了“pdb-only”选项,就像听起来一样,它只包含 PDB 文件,而不会影响程序集的内容。因此,这并不像 /bin 目录中是否存在 PDB 文件那么简单。但是假设您使用“pdb-only”选项,PDB 文件的存在绝不会影响代码的运行时性能。

    * 作为 Marc Sherman points out in a comment ,只要您的源代码没有改变(或者您可以从版本控制系统中检索原始代码),您就可以重建它并生成匹配的 PDB 文件。至少,通常。这在大多数情况下运行良好,但 the compiler is not guaranteed to generate identical binaries each time you compile the same code ,因此可能存在细微差别。更糟糕的是,如果您在此期间对工具链进行了任何升级(例如为 Visual Studio 应用服务包),则 PDB 更不可能匹配。为了保证事后 PDB 文件的可靠生成,您不仅需要存档版本控制系统中的源代码,还需要存档整个构建工具链的二进制文件,以确保您可以精确地重新创建构建环境的配置.不用说,简单地创建和归档 PDB 文件要容易得多。

    关于.net - 发布生成 .pdb 文件,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5457095/

    10-15 05:53