转载自http://blog.csdn.net/hkwlg1314/article/details/49388525
以前也遇到过同样的问题,但没有问个为什么,也没有探个毕竟。昨天调试一个DLL,添加输出信息吧,太麻烦而且不轻易定位,
但设置断点后按“F5”,断点不可用,气泡提示“当前不会命中断点,还没有为该文档加载任何符号。
”再右键->“位置”->“答应源代码与原始版本不同”,还是不行。77777我还不信了,整它!
后来才发现,“Alt+F7”->“配置属性”->“调试”->“命令”中输入的 exe 路径下,已经提供了此 DLL,
压根就没有调用咱 F5 启动的DLL。。。。。。把 exe (以及相关的其它文件,假如有)拷贝到 DLL 目录下,就可以调试了。
犯了个低级错误。但也总结了一下不能调试的各种可能原因:
1.解决方案配置是 Debug ,但没有在工程属性页中“Alt+F7”->“配置属性”->“C/C++”->“常规”->“调试信息格式”,
选择“用于“编辑并继承”的程序数据库(/ZI)”。另外,在“配置属性”->“链接器”->“调试”->“生成调试信息”中,选择“是”。
【 2 】
vs2005奇怪的断点无效问题
最近一工程中,在调试的时候,有些cpp文件都可以设置断点并且跟进去,但是有一个cpp文件总是不能设置断点,
提示“当前不会命中断点。源代码与原始版本不同。” 重新更换过n次文件都不起作用,然后在goole搜索此类类似问题,
找到下篇文章,
然后我把那个cpp文件用记事本打开,另存为unicode格式,再重新编译,最后问题解决!
也可以更改vs2005的设置,选项->常规,将要求源文件与原始版本完全匹配的勾取消就可以了!
清理整个解决方案,重新编译,无效。删除整个目录,从SubVersion服务器上Down下来重新来过,一样无效。上网搜索,未果。
【3】
经常被vs2005的一些选项设置搞惨,这玩意儿太莫名其妙了.
就像上次的那个warning一样,解决办法居然是使用/n替换/n.
VS2005断点失效(断点不可用)解决方案在网上搜罗了一下,如下:
1、无效断点所在的项目和启动项目的设置:项目->属性->配置属性->C/C++->常规->调试信息格式,这里不能为『禁用』;
2、项目->属性->配置属性->链接器->调试->生成调试信息,这里设为『是』;
3、C/C++->优化->优化选择『禁用』;
4、删除解决方案下的.ncb文件;
5、工具->选项->调试->『要求源文件与原始版本完成匹配』去掉勾;
6、最后在上述设置的情况下,重新编译整个解决方案;
不过我的情况是debug模式下,1,2,3,4,6都试过了断点还是不可用,最后试试5居然就行了.真恶心!
7.如果断点仍然无效,那么请格式化代码.很可能是代码含有不可见字符或代码单行过长等原因造成.
解决方法3:重新生成解决方案或者先清理解决方案再生成解决方案
这时再运行,断点也可以正常进入。
那么为什么会造成这种情况呢?这时因为调试时使用的是PDB(Program Database)文件,而当我们在类库中修改代码后,由于没有重新编译,会使用上次的PDB文件,这样就造成了原来的PDB和新的代码文件不匹配,自然调试时也就无法正确进入断点。
再有前面提到,有时断点会跳到其他的位置,是因为断点是定位在代码的行上的,而PDB文件中记录了代码的行数,但是PDB文件却没有更新,所以当我们强行将断点处的代码设置"允许源代码与原始版本不同"时,如果依旧使用上一次的PDB文件,自然断点的行数就定位到了上次记录的代码行数,所以断点就会往后跳了。