作为一名小白,我也是在遇到问题的时候才了解到了PDB文件。就是在一次重装系统后,我执行代码的时候出错了,告诉我无法打开PDB文件。
最后发现了是在编译的时候,程序所依赖的动态链接库也会被编译,编译过程中每个 dll 都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含 dll 库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等动态库无法找到PDB文件。所以就出现找不到PDB文件的问题。最后我通过在网上寻求帮助,找了
打开VS2013,点击菜单“工具”-“选项”。 在选项窗口中,展开“调试”-“常规”,zd然后在右边的窗格中勾选“启用源服务器支持”。
然后展开“调试”-“符号”,勾选“Windows符号服务器”。 这时,会弹出一个警告对话框,无视点击“确定”即可。
最后,点击“确定”关闭选项窗口。
最终帮我解决了问题。
我来总结一下我在此次问题中了解到的知识
PDB(Program Data Base),意即程序的基本数据,是VS编译链接时生成的文件。PDB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB文件是在Debug模式下才会生成。在VS中可以进行设置,在Release版本中也可以生成PDB文件。
PDB文件的作用:
一般情况下PDB文件在调试的过程中生成。程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。
PDB文件的调用过程
- 每个模块被载入的时候,有着相同名字的PDB文件同时被载入。所以Debug模式下,不仅因为代码没有优化,同时因为要载入PDB文件,所以Debug模式下的程序执行速度非常慢。Release 版本,它而往往是进行了各种优化,速度比较快。
- 每个模块只会生成一个相同名字的PDB文件,并且模块生成的同时,会校验PDB文件生成GUID记录在模块内。这是因为调试时,调试器强制要求每个模块必须和PDB文件保持一致。
- PDB文件中记录了源文件路径的相关信息,所以在载入PDB文件的时候,就可以将相关调试信息与源码对应。这样可以可视化的实时查看调试时的函数调用、变量值等相关信息。模块当中记录的PDB文件是绝对路径。所以只要模块在当前电脑上载入,调试器自然地会根据模块当中的路径信息找到相应PDB文件并载入。同样PDB文件中记录的源文件路径也是绝对路径,所以PDB文件只要在当前电脑上载入,调试进入相应模块时,都能够匹配到记录的源文件,然后可视化地查看相应信息。