发布生成.pdb文件,为什么呢?

14 浏览
0 Comments

发布生成.pdb文件,为什么呢?

为什么在编译 Release 版本时,Visual Studio 2005 会生成 .pdb 文件呢?因为我不会在 Release 版本中调试,所以为什么还要生成它们呢?

admin 更改状态以发布 2023年5月21日
0
0 Comments

PDB文件可以在ReleaseDebug下生成。在VS2010中可以这样设置,但在VS2005中也类似:

项目→属性→生成→高级→调试信息

将其更改为None即可。

0
0 Comments

因为如果没有PDB文件,除了地址级别调试,无法通过其他方式调试“发布”版本的程序。 优化真的会影响你的代码,如果出现错误(例如抛出异常),很难找出罪魁祸首。甚至设定断点也变得非常困难,因为源代码行不能一一对应(甚至与生成的汇编代码顺序不同)。PDB文件可以帮助你和调试器解决这些问题,使事后调试变得更加容易。

你提出了一个观点,即如果你的软件准备发布,那么你应该在此之前完成所有的调试工作。虽然这固然正确,但是有几个重要的要点需要记住:

  1. 你应该使用“发布”版本测试和调试你的应用程序(在发布之前)。这是因为启用优化(在“调试”配置下默认禁用)有时会导致出现你不能捕捉到的微妙的错误。在进行这种调试时,你需要PDB符号。

  2. 客户通常会报告边缘案例和只在“理想”条件下出现的错误。这些是几乎不可能在实验室中重现的,因为它们依赖于该用户计算机的某些奇怪配置。如果他们非常乐于助人,他们会报告被抛出的异常并提供堆栈跟踪。或者他们甚至会让你借用他们的计算机远程调试你的软件。在任一种情况下,你都需要PDB文件来帮助自己。

  3. 性能分析应始终在启用优化的“发布”版本上进行。再一次,PDB文件很有用,因为它们允许将分析的汇编指令映射回你实际编写的源代码。

你不能回过头来生成PDB文件,一旦编译完成就来不及了。如果你在编译期间没有创建它们,你就失去了机会。创建它们并不会造成任何伤害。如果你不想分发它们,你可以从你的二进制文件中省略它们。但是,如果你稍后决定需要它们,你就无能为力了。最好总是生成它们并备份一份,以防万一需要使用。

如果你真的想关闭它们,这是一种选择。在项目的属性窗口中,对于要更改的任何配置,将“Debug Info”选项设置为“none”。

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

*正如Marc Sherman在一条评论中指出的,只要您的源代码没有更改(或者您可以从版本控制系统中检索原始代码),您就可以重新构建它并生成一个匹配的PDB文件。至少通常是这样的。大部分时间这很好用,但编译器不能保证每次编译相同代码时生成相同的二进制文件,因此可能会有微小的差异。更糟糕的是,如果您在此期间进行了任何工具链的升级(如为Visual Studio应用服务包),则PDB文件更不可能匹配。要确保可靠地生成事后PDB文件,您需要在版本控制系统中归档您的整个构建工具链的二进制文件,以确保您可以精确地重新创建构建环境的配置。不用说,创建和归档PDB文件要容易得多。

0