PDB是什么文件?的一些用户可能会遇到后缀为的文件。PDB在操作电脑时,这是一个程序数据库文件。我相信很多用户不知道PDB文件。下面的小编会给你科普下pdb文件的知识。请耐心阅读以下内容。
一、PDB文件的介绍
PDB(程序数据库),意思是程序的基础数据,是VS编译链接时生成的文件。PDB文件主要存储VS调试程序所需的基本信息,包括源文件名、变量名、函数名、FPO(帧指针)、对应行号等。因为存储了调试信息,所以PDB文件通常在调试模式下生成。
二、PDB文件的调用过程
Module、EXE和DLL都可以被称为模块,因为它们都有自己独立的栈,所以在调试程序时,我们可以在Call Stack窗口中查看所有被调用的Module Name。并且可以右键单击对应模块的ybmol Load Information,也就是该模块调用的PDB文件路径的进程。
当每个模块被加载时,其同名的PDB文件被同时加载。因此,在Debug模式下,不仅代码没有优化,还需要加载PDB文件,所以Debug模式下的程序执行速度非常慢。
每个模块将只生成一个同名的PDB文件,当模块生成时,它将验证模块中是否记录了PDB文件生成的GUID。这是因为在调试时,调试器会强制每个模块与PDB文件保持一致。在实验过程中,当使用之前生成的PDB文件替换当前的PDB文件时,调试窗口将显示未加载符号。MSDN也给出了相应的指令:调试器将只为二进制文件加载一个pdb,该pdb与二进制文件构建时创建的pdb完全匹配。
PDB文件记录了源文件路径的相关信息,因此在加载PDB文件时,相关的调试信息可以对应到源代码。这样,我们可以在调试过程中实时直观地查看函数调用、变量值等相关信息。模块中记录的PDB文件是绝对路径。因此,只要模块加载到当前计算机上,调试器自然会根据模块中的路径信息找到对应的PDB文件并加载。同样,PDB文件中记录的源文件路径也是一个绝对路径,所以只要将PDB文件加载到当前的计算机上,并调试到相应的模块中,就可以匹配记录的源文件,然后直观地查看相应的信息。
如果找不到源文件,仍然可以查看调试信息,但此时只能查看汇编代码,无法通过源文件直观查看信息。一般来说,大多数C程序员不具备读取汇编代码的能力。因此,通过PDB文件进行调试的意义和效果不大。如果你想让其他人调试他们自己的代码,应该提供PDB文件和源代码。只提供PDB档案意义不大。如果有类似的要求,可以保留相应生成的PDB文件。很多微软库默认不提供PDB文件,但是最近微软逐渐打开了一些库的PDB文件。
三、VS搜索PDB文件的路径顺序
MSDN的详细描述:
1、Visual Studio调试器使用EXE或DLL文件中的PDB路径来查找项目。PDB档案。
2、如果调试器在该位置找不到PDB文件,或者路径无效(例如,如果项目被移动到另一台计算机),调试器将搜索包含EXE的路径。
3、在“选项”对话框(调试文件夹,“符号”节点)中指定的符号路径。
1是默认的当前路径,2是编译链接时记录在模块中的路径。现在关注3,即设置符号文件路径。
1)通过选项->调试->符号打开以下窗口,或者在调用堆栈窗口中右键单击找到符号设置。
2)边肖在调试时将PDF生成路径调整为d: 并将PFB文件剪切为d: 其他目录。
3)调试到dll模块时,右键点击调用栈对应的模块,选择查看符号加载信息。
4)从上图可以看出VS加载PDB文件的顺序,和MSDN介绍的一样。
5)在5)符号设置窗口中,您也可以从服务器缓存符号文件,但是已经尝试了许多方法,但没有一种成功。
为什么要谈论这个安装符号文件?有时候,因为有些项目非常大,代码是共享的,所以代码会放在服务器上。许多大型PDB调试文件很难复制到本地计算机。此时,您可以指定网络路径,并直接通过网络路径进行调试。
四、静态库的PDB文件
静态库也有自己的PDB文件,但它的名字是VC80.PDB/VC100.PDB. PDB文件的静态库会在链接时合并成PDB文件的EXE/DLL。如果生成的静态库lib记录了对应的PDB文件,但是没有对应的PDB文件,那么当静态库链接到EXE/DLL时,会警告找不到静态库对应的PDB文件。因此,如果静态库作为第三方库发布,就不需要生成PDB文件,所以调用方在链接时不会给出警告。
我们在这里向您介绍了PDB档案。感兴趣的伙伴可以好好看看边肖编写的教程。