9.VS调试动态库(符号文件 .pdb 和动态库.dll)

2023-01-28  本文已影响0人  豚大叔的小屋

1.将动态库与调用动态库的主程序放在同一解决方案下

1)打开调用动态库的主程序,在“解决方案资源管理器”中,选中“解决方案’XXX’”,之后在右键菜单中选择“添加->现有项目” 图片.png 2)在“添加现有项目”对话框中选择动态库程序的vcxproj文件。此时就将这两个程序放在了同一解决方案下。 图片.png

2.动态库程序需要设置成调试模式

1)生成pdb文件配置:动态库程序--右键--属性--链接器--调试--修改“生成调试信息”为“生成调试信息(/DEBUG)” 图片.png 2)动态库程序--右键--属性--C/C++常规--修改“调试信息格式”为“程序数据库(/Zi)” 图片.png 3)动态库程序--右键--属性--C/C++--优化--“已禁用” 图片.png 4)编译动态库,成功后,就可以在编译输出找到编译文件的路径 :\主程序\x64\Release。发现生成4个动态库文件.dll,.exp,.lib,.pdb 图片.png 3.将动态库文件拷贝到调用动态库的程序的文件夹中
拷贝动态库所有文件,主要一定要包括.pdb和.dll文件到主程序执行文件的同一目录,也就是.exe路径下

注意:源文件和.pdb .dll 必须是同一个版本
4.动态库调试
1)在动态库中打断点,F9
2)运行主程序,并进行调试F5,就可以进行动态库调试,F10(逐过程),F11(逐语句)
5.动态链接库(Dynamic Link Library)总结
1)基本原理是lib文件中包扩了某一段程序(函数)的入口或者说是地址,而真正机器码是在dll文件中,IDE链接的时候将.lib文件(程序地址)链接到源代码中,程序运行时到相应位置(环境变量path,当前目录等)寻找dll文件并执行其中的机器码。
所以这种引用方式一般需要的文件一般有三个:.h,.lib,.dll,生成的源程序也会比较小,因为他只保存了函数地址,但是这种方式总是会出现找不到xxx.dll这种问题。
2)IED可以调试源码,那么就需要.pdb文件了,pdb文件中保存了dll的符号表,所谓符号表可以理解为机器码(这里是dll中的)中插入的key与源代码文件的映射,这样只要指定源码存放的路径,IDE就会自动去找源码。
需要注意的是,pdb文件和dll文件是配套的,也就是说一旦dll文件有改动(比如说重新生成)pdb文件就必须做相应改变。pdb文件也比较大,程序运行时也会因为要完成映射而比较慢,这也是release版与debug的区别
3)在 Windows 系统中,符号文件(Symbol Files)以 .pdb 为扩展名,是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。 调试应用程序时,这个文件是非常重要的。用 Visual C++ 和 WinDbg 调试程序时都要用到这个文件。

上一篇下一篇

猜你喜欢

热点阅读