.pdb
文件?我不会调试发布版本,所以为什么要生成它们?.pdb
文件?我不会调试发布版本,所以为什么要生成它们?因为没有PDB文件,除了地址级别调试外,不可能用任何其他方式来调试“发布”版本。 优化会对您的代码造成很大影响,如果出现问题(比如抛出异常),就很难找到罪魁祸首。甚至设置断点也非常困难,因为源代码行无法与生成的汇编代码一一匹配(甚至顺序都不同)。PDB文件有助于您和调试器,使事后调试变得更加容易。
您提到如果软件准备好发布,应该在此之前完成所有调试工作。虽然这是正确的,但还有几个重要的要点需要记住:
在发布之前,您应该使用“发布”版本测试和调试应用程序(同时保留优化,因为它们在“调试”配置下默认禁用)。这是因为开启优化有时会导致出现细微错误,而这些错误在其他情况下可能无法发现。进行此调试时,您需要PDB符号。
客户经常报告一些只在“理想”条件下出现的边缘案例和错误。这些东西几乎无法在实验室中复制,因为它们依赖于用户机器的某些奇怪配置。如果他们非常乐于助人,他们会报告抛出的异常并提供堆栈跟踪。或者他们甚至会借给您他们的机器来远程调试您的软件。在这两种情况下,您需要PDB文件来帮助您。
在启用优化的“发布”版本上,应始终进行分析。再次强调,PDB文件非常方便,因为它们允许将正在分析的汇编指令映射回您实际编写的源代码。
编译后无法再生成 PDB 文件。*如果你在构建时没有创建它们,那么就失去了机会。 创建它们不会有任何影响。 如果您不想分发它们,可以从二进制文件中简单地省略它们。 但是,如果以后决定需要它们,那就太晚了。最好始终生成并存档副本,以防万一。
如果您真的想关闭它们,那是一种选择。 在项目的“属性”窗口中,为要更改的任何配置设置“调试信息”选项为“无”。
请注意,“Debug”和“Release”配置默认使用不同的设置来生成调试信息。 您将希望保留此设置。“调试信息”选项在 Debug 构建中设置为“full”,这意味着除了 PDB 文件外,还将嵌入调试符号信息到程序集中。 您还将获得支持编辑并继续等很酷的功能的符号。 在 Release 模式下,选择了“pdb-only”选项,这意味着仅包含 PDB 文件,而不会影响程序集的内容。 因此,在您的/bin
目录中是否存在 PDB 文件并不像简单的有或没有那么简单。 但是假设您使用“pdb-only”选项,则 PDB 文件的存在不会以任何方式影响代码的运行时性能。
* 正如Marc Sherman 在评论中指出,只要源代码没有改变(或者您可以从版本控制系统中检索到原始代码),您就可以重新构建它并生成匹配的 PDB 文件。至少通常情况下是这样的。这在大多数情况下运行良好,但是编译器不能保证每次编译相同的代码时都会生成相同的二进制文件,因此可能存在微妙的差异。更糟糕的是,如果您同时对工具链进行了任何升级(比如为 Visual Studio 应用了服务包),则 PDB 就更不可能匹配了。为了确保可靠地生成事后的 PDB 文件,您需要归档不仅版本控制系统中的源代码,还要归档整个构建工具链的二进制文件,以确保您能够精确地重新创建构建环境的配置。不言而喻,简单地创建和归档 PDB 文件要容易得多。
.reload /i foo.dll
。这将加载 foo.pdb 文件,即使它是在发布 foo.dll 后创建的。 - Marc ShermanPDB文件可以用于生成Release
和Debug
版本。 在VS2010中设置如下(在VS2005中也应该类似):
项目→属性→生成→高级→调试信息
只需将其更改为无
即可。
FileNotFoundException
),但你将无法看到堆栈跟踪。这使得很难确定是哪一行代码导致了异常的抛出。 - Cody Gray如果没有.pdb文件,几乎无法在生产代码中进行调试;您必须依赖其他可能耗时费力的工具。我知道您可以使用跟踪或者windbg等工具,但这实际上取决于您想要实现什么目标。在某些情况下,您只需要通过生产数据来观察特定行为,而不会出现错误或异常,这就是.pdb文件派上用场的地方。如果没有它们,运行调试器将是不可能的。
你为什么那么肯定你不会调试发布版本的呢?有时候(希望很少但确实会发生),你可能会收到一个客户的缺陷报告,而这个缺陷在调试版本中无法重现,可能由于不同的时间、微小的不同行为或其他原因。如果这个问题在发布版本中可重现,你将很高兴拥有匹配的pdb。
此外,您可以利用崩溃转储来调试软件。客户将其发送给您,然后您可以使用它来识别源代码的确切版本 - 如果设置正确,Visual Studio甚至会使用崩溃转储提取正确的调试符号(和源代码)。请参阅微软关于符号存储的文档。
.PDB文件是“程序数据库”的缩写,它包含有关调试器的调试点和被使用或引用的资源信息。在我们以调试模式构建时生成。它允许应用程序在运行时进行调试。
在调试模式下,.PDB文件的大小会增加。这在测试应用程序时很有用。
这是一篇关于PDB文件的优秀文章。
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
*.xml
文件,请小心操作。 - Mariusz Jamro调试符号(.pdb)和 XML 文档(.xml)文件占总大小的很大一部分,不应该包含在常规部署包中。 但如果需要,应该可以访问它们。
一种可能的方法:在 TFS 构建过程结束时,将它们移动到单独的工件中。
实际上,如果没有PDB文件和符号信息,就不可能创建成功的崩溃报告(内存转储文件),微软也无法完全了解问题的原因。
因此,拥有PDB可以改善崩溃报告。