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

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 调试程序时都要用到这个文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容