什么是一 .pdb 文件?

Posted

技术标签:

【中文标题】什么是一 .pdb 文件?【英文标题】:What is a PDB file? 【发布时间】:2011-04-23 09:50:30 【问题描述】:

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

【问题讨论】:

pdb 是一个程序数据库文件,它是在编译时创建的。该文件包含调试和项目状态信息,允许增量链接程序的调试配置。 @pavanred 你确定 C# 编译器也做增量链接吗?我只在 C++ 世界中听说过它。在 C++ 项目中,您可以从项目属性启用/禁用增量链接。 C#项目中也有选项吗? 【参考方案1】:

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

【讨论】:

@Jon 如果应用程序在使用中崩溃,它是否有助于向用户提供额外信息? (即,它对 JIT 窗口有帮助,而不是“此程序需要结束,发送 Windows 错误报告”) 请记住,您可能应该将这些包含在调试版本中,因为它允许将异常跟踪到代码中的特定行。如果没有 pdb 文件中的符号,您会发现很难确定具体问题以解决它们。您也不一定需要将它们从发布版本中排除,因为有时大型报告中的额外信息可能非常有用。 @Jared:是的,它包括异常的堆栈跟踪,它将精确定位到特定的函数和代码行。 @Jared:“JIT 窗口”是什么意思?它不太可能向用户提供更多信息,但如果需要,它可以让您将调试器附加到发布版本。通常,您不会将它包含在最终用户应用程序中。当然,仅仅因为它被复制到 Release 文件夹并不意味着你必须在安装程序中发布它...... @Ata:PDB,不是 PDF。请在您的脑海中将两者分开 - 它们是完全不同的文件格式,用于不同的目的。包含 PDB 不会特别引入问题;它可能使黑客的工作稍微更容易,但这是你特别关心的问题吗?一般来说,在大多数情况下,.NET 可以相对容易地进行反编译 - 如果您担心这一点,根本不提供 PDB 并不是一个好的解决方案。【参考方案2】:

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

直到今天,当我试图弄清楚为什么包含Exception.StackTrace 的消息框缺少文件和行号信息时,一切都运行良好——这是排除异常所必需的。我重新阅读了这篇文章,发现了关键信息:虽然 PDB 不是应用程序运行所必需的,但文件和行号必须出现在 StackTrace 字符串中。我将 PDB 文件包含在可执行文件夹中,现在一切都很好。

【讨论】:

这是一个非常重要的部分,请记住这里的accepted answer 没有提及。【参考方案3】:

PDBProgram-Debug Data Base 的缩写。顾名思义,它是一个存储库(持久存储,如数据库),用于维护在调试模式下运行程序所需的信息。它包含调试代码(在 Visual Studio 中)所需的许多重要信息,例如在您希望调试器在 Visual Studio 中中断的位置放置断点。

如果您从调试目录中删除 *.pdb 文件,这就是 Visual Studio 无法命中断点的原因。 Visual Studio 调试器还可以告诉您堆栈跟踪中发生异常的代码文件的确切行号。它只能在*.pdb 文件的帮助下做到这一点。因此,PDB 文件对于调试目的非常有帮助。

一般不建议排除*.pdb文件的生成。从生产发布的角度来看,您应该做的是创建 PDB 文件,但不要在产品安装程序中将它们发送到客户站点。将所有生成的 PDB 文件保存在符号服务器上,以便将来根据需要使用/引用。

在调试进程崩溃问题的场景中尤为重要。在分析故障转储文件时,如果未保留在构建过程中创建的原始 *.pdb 文件,那么 Visual Studio 将无法找出导致崩溃的确切代码行

如果您仍想为任何版本完全禁用 *.pdb 文件的生成,请转到项目的属性 -> 构建选项卡 -> 单击 高级 按钮 -> 选择 none from “调试信息”下拉框 -> 按 OK 如下图所示。

注意:必须为“调试”和“发布”构建配置分别进行此设置。

【讨论】:

【参考方案4】:

PDB file 包含调试器使用的信息。它不是运行您的应用程序所必需的,也不需要包含在您的发布版本中。

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

【讨论】:

发布模式仍然默认构建 PDB,我相信。您可以更改项目属性以禁用它。 是的;它仍然与默认项目一起发布。 我刚刚检查过,如果使用 Visual Studio,我也会默认获得一个。 惊喜!在过去 11 年的某个时候,该 PDB 链接过时了。这是新链接:wintellect.com/pdb-files-what-every-developer-must-know【参考方案5】:

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

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

查看Microsoft Docs

【讨论】:

以上是关于什么是一 .pdb 文件?的主要内容,如果未能解决你的问题,请参考以下文章

部分无法查找或打开 PDB 文件

如何打开pdb文件?

pdb文件是啥?

VS2012 每次编译程序都会出现3个无法查找或打开 PDB 文件。

windbg怎么打开pdb文件

PDB文件用啥软件打开?