PDB文件格式详解

来源: 系统大全 2017/08/04 16:10

 PDB是什么文件呢?一些用户在操作电脑的时候,可能会碰到后缀名为.pdb的文件,该文件是程序数据库文件,相信很多用户对于PDB文件都不了解。
 

\

  一、PDB文件的介绍

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

 

  二、PDB文件的调用过程

  模块(Module),EXE和DLL都可以称之为模块,因为它们都有自已独立的Stack,所以我们在调试程序时,可以在Call Stack窗口查看到所有调用的Module Name。并且可以右键查看相应模块的ybmol Load Information,即该模块调用的PDB文件路径的过程。

  每个模块被载入的时候,其相同名字的PDB文件同时被载入。所以Debug模式下,不仅因为代码没有优化,同时因为要载入PDB文件,所以Debug模式下的程序执行速度非常慢。


每个模块只会生成一个相同名字的PDB文件,并且模块生成的同时,会校验PDB文件生成GUID记录在模块内。这是因为调试时,调试器强制要求每个模块必须和PDB文件保持一致。实验过程中,用之前生成的PDB文件替换当前生成的PDB文件时,Debug窗口会显示No symbols loaded. MSDN也做了相应的说明:The debugger will load only a PDB for a binary that exactly matches the PDB that was created when the binary was built.

  PDB文件中记录了源文件路径的相关信息,所以在载入PDB文件的时候,就可以将相关调试信息与源码对应。这样可以可视化的实时查看调试时的函数调用、变量值等相关信息。模块当中记录的PDB文件是绝对路径。所以只要模块在当前电脑上载入,调试器自然地会根据模块当中的路径信息找到相应PDB文件并载入。同样PDB文件中记录的源文件路径也是绝对路径,所以PDB文件只要在当前电脑上载入,调试进入相应模块时,都能够匹配到记录的源文件,然后可视化地查看相应信息。

  如果源文件找不到,那么依然能够查看调试信息,只是这个时候只能查看汇编代码,不能通过源文件可视化查看信息。一般情况下,绝大多数C++程序员不具备阅读汇编代码的能力。所以完全通过PDB文件调试,意义与作用均没有多大。如果要让其他人能够调试自已的代码,PDB文件和源码都应该提供,只提供PDB文件的意义不大。如果确实有类似的需求,可以保留相应生成的PDB文件。微软的很多库默认是不提供PDB文件的,但是近来微软逐渐开放了一些库的PDB文件。

 

  三、静态库的PDB文件

  静态库也有自已的PDB文件,只不过其名字是VC80.PDB/VC100.PDB这样的名字。静态库的PDB文件会在链接时合并到EXE/DLL的PDB文件中去。如果生成的静态库lib里有记录相应的PDB文件,却又没有相应的PDB文件,那么静态库链接成EXE/DLL时就会报警告找不到静态库对应的PDB文件。所以如果静态库作第三方库发布时,可以不用生成PDB文件,这样调用者链接时就不会报警告。

  关于PDB文件就给大家介绍到这里了,有兴趣的伙伴,可以好好看看小编整理的教程哦! 

猜你喜欢

新闻资讯

装机必备

生活服务

现代都市人很多起床第一件事就是拿手机看最新的新闻资讯,看看今天最新的资讯内容,现在手机上各种新闻客户端有很多,如果今日头条,腾讯新闻,凤凰新闻,网易新闻等。

进入专区

安卓装机必备,一站式必装应用大全,为您精选好用的手机必装应用,自动为您推荐当下热门、好用的软件。安装精品应用更加方便快捷!

  • 必剪app 必剪
  • 饭团看书app 饭团看书
  • 饭团探书app 饭团探书
  • 卡通相机app 卡通相机
  • 盲盒大玩家app 盲盒大玩家
  • 多多计算器安卓版 多多计算器
  • 嘿市app 嘿市
  • 头像空间app 头像空间
进入专区

生活服务分类聚集的大量我们生活中平常用的软件,只要你想得到的基本通通有,欢迎使用!

  • 垃圾分类大师安卓版 垃圾分类大师
  • 标准商标查询安卓版 标准商标查询
  •  医学三基题库安卓版 医学三基题库
  • 天天看港剧安卓版 天天看港剧
  • 趣伴安卓版 趣伴
  • 日本换乘安卓版 日本换乘
  • 蘑菇影视安卓版 蘑菇影视
  • 影院通电影票安卓版 影院通电影票
进入专区

用户评论

全部
//wap教程