VS MFC 中DLL链接库断点不能命中的解决方案总结

时间:2024-05-18 16:18:07

一、结论

          1. ”当前不会命中断点,因为还没有为该文档加载任何符号”才是要使断点命中的要点;

          2. 方案1是前提,一定要确保DLL是最新的,头文件包含要同步一致;

          3. 按第6条的第一步就解决问题了,其它实验后并无效果。

二、方案

1. https://blog.****.net/zhangbinsijifeng/article/details/46328393

(1).要调试的dll不在调试进程的进程空间,调不到,也就是该dll还没有被加载进exe内。即exe还没有使用到dll呢,当然不会加载该dll到exe的进程空间中

(2).exe调用的dll,不是dll源代码生成的最新的dll。一定要确保,exe调用的dll是dll源代码最新生成的dll。

不理解下面这段话中的“现有项目”和“一直在用的DLL”  的具体指代    

 “第一条out了。肯定是第二条。终于想起来了。我引用了三四个项目文件,有的项目文件没有引用“工程”上的现有项目,而是直接引用了一个一直在用的dll。把那个引用删除,然后改成引用到现有项目。”

2. https://blog.****.net/cokewei/article/details/50547557

环境:VS2015解决方案中有2个项目,一个项目是C++写的dll源代码,另一个是C#调用这个dll测试。

问题:C#调用dll无法在dll源代码中中断,提示“当前不会命中断点,因为还没有为该文档加载任何符号”

解决:

(1).首先设置dll和测试程序输出路径在同一个目录下

(2).其次设置

        a 项目-〉属性-〉配置属性-〉C/C++-〉常规-〉调试信息格式,这里不能为“禁用”。   

        b项目-〉属性-〉配置属性-〉链接器-〉调试-〉生成调试信息,这里设为“是”。

最后很重要的一点:C#测试程序项目属性-〉调试->启用本机代码调试 打勾

希望对遇到相同问题的人有用。转载请注明出处

3. https://blog.****.net/madison_wang/article/details/52174876

把两个工程的配置属性中->调试:调试器类型由自动改为混合

4. https://blog.****.net/hnyzyty/article/details/46482077

首先,设置调试工作目录(把图1红框内的路径改为待调试的DLL所在的路径)

之后,切记要把待调试的项目重新生成一次!

VS2013 MFC 中DLL链接库断点不能命中的解决方案总结

5. https://blog.****.net/qq_22889875/article/details/79621534

在对C#调用的C++动态库打断点进行调试时,断点变为黄色感叹号,未进入断点,反复查找原因,重新生成的dll文件已经拷贝到C#相关目录下面,但还是无法进入断点,后来发现重新生成的动态库的pdb文件没有拷贝到C#相关目录下面,对动态库进行清理,重新生成解决方案,然后将新生成的dll和pdb同时拷贝到C#相关目录下,调试动态库,断点生效,问题解决。

(release文件夹下才有PDB,而debug模式下没有PDB,因此此方案未试验。)

6.https://blog.****.net/shakspers/article/details/78978017