什么是PDB文件?


251

什么是PDB文件,并且在重建解决方案时如何从发布文件夹中将其排除?


17
pdb是程序数据库文件,在编译时创建。该文件包含调试和项目状态信息,这些信息允许增量链接程序的调试配置。
2010年

@pavanred您确定C#编译器也会进行增量链接吗?我只是在C ++世界中听说过它。在C ++项目中,您可以启用/禁用来自项目属性的增量链接。C#项目中也有选项吗?
RBT

Answers:


235

PDB文件包含供调试器使用的信息。无论如何,发布版本中的信息比调试版本中的信息少。但是,如果您根本不想生成它,请转至项目的Build属性,选择Release配置,单击“ Advanced ...”,然后在“ Debug Info”下选择“ None”。


2
@Jon如果应用程序在使用中崩溃,是否有助于向用户提供其他信息?(即,它对JIT窗口有帮助,而不是“此程序需要结束,发送Windows错误报告”)
Jared Harley 2010年

19
请记住,您可能应该将它们包含在调试版本中,因为它允许将异常跟踪到代码中的特定行。在pdb文件中没有符号的情况下,您将很难找到具体问题来解决它们。您也不必将它们从发行版本中排除,因为有时大报表中的额外信息可能非常有用。
达比奥(Darbio)2010年

4
@Jared:是的,它包含异常的堆栈跟踪,它将精确地指向特定的函数和代码行。
达比奥(Darbio)2010年

1
@Jared:“ JIT窗口”是什么意思?不太可能向用户提供更多信息,但是如果需要,它可以让您将调试器附加到发行版中。通常,您通常不会将其包括在最终用户应用程序中。当然,仅因为将其复制到Release文件夹并不意味着您必须将其运送到安装程序中……
Jon Skeet 2010年

3
@Ata:PDB,而不是PDF。请分开您的想法-它们是完全不同的文件格式,用于不同的目的。包含PDB不会特别引起问题。这可能会使黑客的工作稍微容易一些,但这是否对您特别重要?通常,在大多数情况下,.NET都可以相对轻松地反编译-如果您担心此问题,仅不发布PDB并不是一个好的解决方案。
乔恩·斯基特

129

我最初问自己一个问题:“ 是否需要将PDB文件部署到我的客户的计算机上? ”,在阅读了这篇文章之后,决定排除该文件。

直到今天,一切都运转良好,直到我试图弄清为什么包含的消息框Exception.StackTrace缺少文件和行号信息-这是对异常进行故障排除所必需的。我重新阅读了这篇文章,发现了关键的信息点:尽管PDB对于应用程序的运行不是必需的,但文件和行号必须存在于StackTrace字符串中。我将PDB文件包含在可执行文件夹中,现在一切正常。


2
请记住,这是一个非常重要的部分,accepted answer此处未提及。
蒙库

85

PDBP rogram D ata B ase 的缩写。顾名思义,它是一个存储库(永久存储,例如数据库),用于维护在调试模式下运行程序所需的信息。它包含在调试代码时(在Visual Studio中)所需的许多重要的相关信息,例如,在插入中断点的位置,您希望调试器在Visual Studio中中断。

这就是为什么如果您*.pdb从调试文件夹中删除文件,Visual Studio多次无法达到断点的原因。Visual Studio调试器还可以借助*.pdb文件来告诉您在堆栈跟踪中发生异常的代码文件的精确行号。因此,有效地pdb文件确实是调试程序时对开发人员的福音。

通常,不建议排除*.pdb文件的生成。从生产发行版的角度来看,您应该做的是创建pdb文件,但不要将其发送到产品安装程序中的客户站点。将所有生成的PDB文件保存到符号服务器上,以后可以在需要时从中使用/引用它。特别适用于调试进程崩溃等问题的情况。当您开始分析故障转储文件时,如果*.pdb未保留在构建过程中创建的原始文件,则Visual Studio将无法找出导致崩溃的确切代码行

如果仍然要完全禁用*.pdb任何发行版的文件生成,请转到项目的属性->生成选项卡->单击Advanced按钮-> none从“调试信息”下拉框中选择->按OK如下快照所示。

无C#项目的调试信息设置

注意:对于“调试”和“发布”构建配置,必须分别完成此设置。


13

一个PDB文件中包含调试器所使用的信息。不需要运行您的应用程序,也不需要将其包含在您的发行版本中。

您可以禁止在Visual Studio中创建pdb文件。如果您是从命令行或脚本构建的,则忽略该/Debug开关。


2
我认为,发布模式默认仍会构建PDB。您可以更改项目属性以将其禁用。
乔恩·斯基特

对; 它仍然随默认项目一起发布。
安德鲁·巴伯

我刚刚检查了一下,如果使用Visual Studio,我也会默认得到一个。
Mark Byers 2010年

4

程序调试数据库文件(pdb)是Microsoft用来存储调试信息的文件格式。

当您使用Visual Studio或命令提示符构建项目时,编译器将创建这些符号文件。

检查Microsoft文档

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.