pdb文件是如何存储蛋白质3d结构的(pdb文件)

2022-09-02 11:24:01   编辑:毛彩骅
导读 很多朋友对pdb文件是如何存储蛋白质3d结构的,pdb文件还不了解,今天小绿就为大家解答一下。一、PDB文件介绍PDB(Program Data Base),意...

很多朋友对pdb文件是如何存储蛋白质3d结构的,pdb文件还不了解,今天小绿就为大家解答一下。

一、PDB文件介绍

PDB(Program Data Base),意为程序的基础数据,是VS编译链接时生成的文件。PDB文件主要存储VS调试程序所需的基本信息,包括源文件名、变量名、函数名、FPO(帧指针)、对应行号等。因为存储了调试信息,所以PDB文件通常是在调试模式下生成的。

二、PDB文件的调用过程

Module、EXE和DLL都可以称为模块,因为它们都有自己独立的堆栈,所以我们在调试程序时,可以在调用堆栈窗口中查看所有被调用的模块名称。并且可以右键查看对应模块的ybmol加载信息,也就是该模块所调用的PDB文件路径的进程。

加载每个模块时,会同时加载其同名的PDB文件。所以在调试模式下,不仅代码没有优化,还需要加载PDB文件,所以调试模式下的程序执行速度非常慢。

每个模块只会生成一个同名的PDB文件,同时会验证生成的PDB文件GUID是否记录在模块中。这是因为在调试时,调试器强制每个模块必须与PDB文件一致。在实验过程中,当之前生成的PDB文件被用来替换当前生成的PDB文件时,调试窗口将显示没有加载任何符号。MSDN也给出了相应的解释:调试器将只为与二进制文件构建时创建的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)通过选项打开以下窗口-"de buggin-"符号或右键单击调用堆栈窗口找到符号设置。

2)边肖将PDF的生成路径调整为D: \,调试时将PFB文件剪切到D: \ other目录。

3)调试到dll模块时,右击调用栈对应的模块,选择查看符号加载信息。

4)通过上图可以看到VS加载PDB文件的顺序,和MSDN介绍的一样。

5)在5)符号设置窗口,你也可以从服务器缓存符号文件,但边肖尝试了很多方法,但都不成功。

为什么说这个设定符号文件?有时候因为有些项目非常大,代码是共享的,所以会把代码放到服务器上。如果将许多大型PDB调试文件复制到本地计算机,会很麻烦。此时可以指定网络路径,直接通过网络路径进行调试。

四。静态库的PDB文件

静态库也有自己的PDB文件,但它的名字是VC80.PDB/VC100.PDB.静态库的PDB文件在链接时会合并到EXE/DLL的PDB文件中。如果在生成的静态库lib中记录有对应的PDB文件,但是没有对应的PDB文件,那么当静态库链接成EXE/DLL时,会给出一个警告:找不到静态库对应的PDB文件。因此,如果静态库被发布为第三方库,则不需要生成PDB文件,这样调用方在链接时就不会报告警告。

这是所有关于PDB的文件。有兴趣的伙伴可以好好看看边肖整理的教程!

以上问题已解答完毕,如果想要了解更多内容,请关注本站

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章