什么是PDB文件,在重新构建解决方案时如何将其从发布文件夹中排除?
当前回答
PDB是程序调试数据库的缩写。顾名思义,它是一个存储库(如数据库等持久存储),用于维护在调试模式下运行程序所需的信息。它包含了代码调试所需的一些重要信息,例如,在Visual Studio (VS)中,你在什么位置设置了断点,你希望调试器在哪里中断。
这就是为什么如果从调试目录中删除PDB文件,Visual Studio就不能达到断点的原因。Visual Studio调试器能够告诉您发生异常的代码文件的确切行数及其堆栈跟踪。它只能在PDB文件的帮助下做到这一点。因此,PDB文件对调试非常有用。
一般来说,不建议在构建过程中排除PDB文件的生成。从产品发布的角度来看,您应该做的是创建PDB文件,但不要在产品安装程序中将它们发送到客户站点。将所有生成的PDB文件保存在符号服务器上,以便将来在需要时使用/引用。
这在调试进程崩溃问题的场景中特别重要。在分析崩溃转储文件时,如果没有保存在构建过程中创建的原始PDB文件,Visual Studio将无法确定程序崩溃的确切代码行。
如果你仍然想禁用PDB文件的生成,那么按照以下步骤:
进入项目属性窗口。打开属性窗口,在解决方案资源管理器中选择项目文件并按Alt + Enter。 转到Build选项卡 单击高级 “调试信息”下拉框选择“不” 按OK,如下图所示:
注意:此设置必须分别用于调试和发布构建配置。
其他回答
程序调试数据库文件(pdb)是微软公司用于存储调试信息的文件格式。
当您使用Visual Studio或命令提示符构建项目时,编译器会创建这些符号文件。
查看微软文档
我最初问自己一个问题“我是否需要将PDB文件部署到客户的机器上?”,在阅读了这篇文章后,我决定排除这个文件。
一切都很正常,直到今天,我试图弄清楚为什么消息框包含异常。StackTrace缺少文件和行号信息——这是排除异常所必需的。我重新阅读了这篇文章,发现了关键的信息:虽然PDB不是应用程序运行所必需的,但在StackTrace字符串中显示文件和行号是必要的。我将PDB文件包含在可执行文件夹中,现在一切正常。
PDB文件包含调试器要使用的信息。发布版本中的信息比调试版本中的信息要少。但是如果你想让它完全不生成,转到项目的Build属性,选择Release配置,点击“Advanced…”,在“Debug Info”下选择“None”。
PDB文件包含调试器使用的信息。它不是运行应用程序所必需的,也不需要包含在您的发布版本中。
您可以禁用在Visual Studio中创建pdb文件。如果从命令行或脚本构建,则省略/Debug开关。
PDB是程序调试数据库的缩写。顾名思义,它是一个存储库(如数据库等持久存储),用于维护在调试模式下运行程序所需的信息。它包含了代码调试所需的一些重要信息,例如,在Visual Studio (VS)中,你在什么位置设置了断点,你希望调试器在哪里中断。
这就是为什么如果从调试目录中删除PDB文件,Visual Studio就不能达到断点的原因。Visual Studio调试器能够告诉您发生异常的代码文件的确切行数及其堆栈跟踪。它只能在PDB文件的帮助下做到这一点。因此,PDB文件对调试非常有用。
一般来说,不建议在构建过程中排除PDB文件的生成。从产品发布的角度来看,您应该做的是创建PDB文件,但不要在产品安装程序中将它们发送到客户站点。将所有生成的PDB文件保存在符号服务器上,以便将来在需要时使用/引用。
这在调试进程崩溃问题的场景中特别重要。在分析崩溃转储文件时,如果没有保存在构建过程中创建的原始PDB文件,Visual Studio将无法确定程序崩溃的确切代码行。
如果你仍然想禁用PDB文件的生成,那么按照以下步骤:
进入项目属性窗口。打开属性窗口,在解决方案资源管理器中选择项目文件并按Alt + Enter。 转到Build选项卡 单击高级 “调试信息”下拉框选择“不” 按OK,如下图所示:
注意:此设置必须分别用于调试和发布构建配置。
推荐文章
- 在c#中从URI字符串获取文件名
- 检查SqlDataReader对象中的列名
- 如何将类标记为已弃用?
- c# 8支持。net框架吗?
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接