为什么 Visual Studio 2005 在发布时编译时会生成 .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/