专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

pdb是什么文件,pdb文件有什么作用?

来源:小易整编  作者:小易  发布时间:2022-11-29 06:08
摘要:pdb是什么文件,pdb文件有什么作用?PDB全称Program Database,是程序数据库 ( .pdb) 文件(也称为符号文件)将项目源代码中的标识符和语句映射到已编译应用中的相应标识符和说明。 这些映射文件将调试器链接到源代码,以...

pdb是什么文件,pdb文件有什么作用?

PDB全称Program Database,是程序数据库 ( .pdb) 文件(也称为符号文件)将项目源代码中的标识符和语句映射到已编译应用中的相应标识符和说明。 这些映射文件将调试器链接到源代码,以进行调试。

这个文件会在我们调试的时候被使用到,这个东西可以理解为调试的时候应用程序和源文件之间的一个桥梁。正是归功于这个文件,我们才能在debug的时候看到程序当前执行相对应的代码和监视到一些变量。

pdb是什么文件,pdb文件有什么作用?

pdb符号文件的工作方式和包含的信息

.pdb 文件保存调试和项目状态信息,使用这些信息可以对应用的调试配置进行增量链接。 在调试时,Visual Studio 调试器使用 .pdb 文件来确定两项关键信息:

要在 Visual Studio IDE 中显示的源文件名和行号。

在应用中停止的断点位置。

符号文件还会包含源文件的位置,以及要从中检索它们的服务器(可选),所以vs2022 可以同步符号文件获取源代码。(个人修改过了)

每个源文件的MD5校验和都存储在.pdb文件中。

.pdb文件作用还包括Debug里的PDB是保存着调试和项目状态信息、有断言、堆栈检查、记录出错信息等代码。Release 里的PDB是记录:出什么错了+错误在哪行。所有的其他的数据都已经包含在了.NET Metadata中了; (个人修改过了)

调试器只会加载与在生成应用时创建的 .pdb 文件完全匹配的 .pdb 文件(即原始 .pdb 文件或副本) 。 这样的完全重复是必需的,因为即使代码本身未更改,应用的布局也可能会更改。

因为微软并未公布PDB内部细节,只公开了一些API,所以对于这个文件一直是一个迷。

案例:pdb类型文件的作用之一:记录具体异常的关键信息,如文件路径和行号

pdb文件的主要作用

1、用于本地代码调试。在本地调试的时候就用pdb(只是被程序员忽略,默认生成放在debug文件夹的子目录中),建立源代码和dll之间的联系,这样调试器才知道哪行代码设置断点、断言、变量、到底哪一行代码异常等。

2、用于公开库的参与本地调试。公开的库(dll)在别程序员电脑上运行时候,要加载对应库(dll).pdb文件。dll文件的代码才能参与本地调试。程序员才能在库中设置断点、才能查到出错代码的行号等。

3、调试是配置增量链接

PDB文件什么时候产生?

PDB文件是在我们编译工程的时候产生的,它是和对应的模块(exe或dll)一起生成出来的。我们一般可能不会意识到PDB文件的重要性,因为如果只是我们本地进行开发,我们总是能够进行调适。这里我要引入两个概念:Private Build和Public Build1。Private Build指的是在开发机器上的编译,Public Build指的是在负责编译的机器上的编译。

正如上面我所说Private Build一般不会有问题,因为在编译出来的机器上进行调试所有必要的文件都在该在的地方。所有大部分不能调试的问题都发生在Public Build的情况下。

如果你的应用程序需要发布或者当作产品卖得,你就需要特别注意要保存你发布出去的那个版本的PDB文件和源文件。注意:你只有一次机会保存着发布出去的PDB文件,如果你弄丢了将无法找回(唯一性)。

为什么PDB这么重要--很难再次生成一样的.pdb ?

也许你会认为如果拿一份一模一样的源代码重新编译一个PDB文件,然后用来调试就行了。我也曾经这么认为过,直到有一天…......

直接的原因是因为VS生成出来的二进制文件的Header部分里面包含了它对应的PDB的GUID,PDB也包含一个GUIID,这两个GUID实在编译的时候添加进去的。VS调试器在载入PDB的时候会去比对这个两个GUID,如果不一致,那么就不能使用。

当然上面那个原因只是一个表面现象,根本原因是既是两份一模一样的代码编译器编译出来的文件可能是不一样的。因为编译器在编译的时候会对代码进行优化,而同一份代码可能会有很多种优化的方法,它会根据当时的具体机器的环境等情况选择一个最快的生成方法。所以它生成出来的文件有可能是不一样的!所以如果连生成出来的文件都不一样,那么原来的那个PDB里面的符号对应的地址也就没有意义了。具体可以看:引用2

这里有一个非常简单的例子来演示。假设您正在构建的组件由一个函数和一个变量组成。
生成的文件内容是否像这样重要吗?
0000: MyFunc ()
0020: gGlobalVariable
还是这个?
0000: gGlobalVariable
0004: MyFunc ()
在功能上,这一点都不重要,但对于调试器来说,这是非常重要的。事实上,如果出错,可能会对调试会话造成严重破坏。在这个例子中,如果你使用来自构建#1的符号文件来尝试确定全局变量的值,当运行由构建#2构建的组件时,会发生什么?调试器将查阅符号文件并返回地址0020所引用的值。不幸的是,在组件构建#2中,全局变量不在那个地址。这里有一些值组成了MyFunc()的指令流。

.net C#如何生成.pdb文件

右建项目 属性》生成》常规》调试符号

自 C# 6.0 起,对于所有编译器版本而言,pdbonly 与 full 之间没有任何区别。 请选择 pdbonly。 若要更改 .pdb 文件的位置,请参阅 PdbFile。

pdb是什么文件,pdb文件有什么作用?

以下为有效值:


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/868748.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • jsp文件怎么创建

    jsp文件怎么创建

    创建jsp文件的步骤:1、安装和配置java开发环境;2、安装和配置web服务器;3、创建jsp文件;4、编写jsp代码;5、部署和运行应用程序;6、调试和测试。详细介绍:1、安装和配置java开发环境,首先需要在计算机上安装jdk,可以从...

  • 什么是电子版文件

    什么是电子版文件

    电子版文件是把纸质文档以计算机软件,如word、excel、pp、cad、photoshop等软件编辑出来,可以通过邮件、u盘、网络或其他传送方式传送的文件。本文操作环境:Windows7系统,DellG3电脑。电子版文件是把纸质文档以计...

  • php文件gbk怎么转utf8

    php文件gbk怎么转utf8

    php文件gbk转utf8的方法:首先建立存放转换后文件的目录;然后建立对应的文件夹;最后通过“-execiconv-fgbk-tutf-8{}-outf8/...”方法转换php文件即可。本文操作环境:windows7系统...

  • mac的文件夹变成exe?

    mac的文件夹变成exe?

    很多朋友对于mac文件夹变成exe的问题向我们咨询,以下详细解答将为大家提供参考,希望能帮到大家。请继续阅读!文件夹变成exe文件怎么办1、打开一台无病毒的电脑,双击打开电脑图标,并点击“了解组织——文件夹和搜索选项”,在弹出的窗口中选择“...

  • 备份文件在哪里找

    备份文件在哪里找

    备份在哪里找?电脑的系统备份文件的位置由自己决定。1、点击桌面左下角的“Windows”按钮,再找到“设置”按钮点击进入。2、从打开的“设置”界面中,点击进入“更新和安全”的详细设置界面。3、进入“更新和安全”界面,从左侧切换到“备份”选项...

  • ppt如何插入文件

    ppt如何插入文件

    ppt插入文件的方法:首先打开电脑,打开ppt,点击【插入】;然后点击【对象】,并点击【由文件创建】;接着点击【浏览】,并点击选中一个文件,点击【确定】;最后点击勾选上链接和显示为图标即可。本文操作环境:windows7系统、Microso...

  • .exe是什么文件类型

    .exe是什么文件类型

    .exe文件是可执行文件的扩展名之一,表示这些文件包含程序代码和数据,可以在计算机中直接执行。.exe是可执行文件的扩展名,可执行文件是包含程序的文件,也就是能够作为计算机中的程序执行或运行的特定类型的文件。可执行文件可以由Microsof...

  • users是什么文件夹

    users是什么文件夹

    users是用户文件夹,主要存放用户的各项配置文件;user文件夹包含用户使用过程中产生的数据,程序内容以及文档、音乐等内容。users文件夹是windows系统的重要文件夹,不能随意删除;它保存了很多用户信息,一旦删除会造成数据丢失,严重...

  • 周排行
  • 月排行
  • 年排行

精彩推荐