VS调试 不会命中断点,源代码与原始版本不同的解决办法 - 小众知识

VS调试 不会命中断点,源代码与原始版本不同的解决办法

2013年01月27日 14:18:05 苏内容
  标签: VS/断点
阅读:7328

有这么几种方法可以尝试去解决此问题:

1、工具”——>选项”——>调试”——>要求源文件与原始版本完成匹配”去掉勾选。

2、清理解决方案,重新生成;重新格式化文件;ctrl+a全选文档,CTRL+K,CTRL+F,重新编译。

3、用nodepad将代码转存为unicode格式。

4、上面三种办法还不行,把出问题的文件内容copy出来,然后删除此文件,编译(这里一定要编译!我试过不编译是不行的),当然肯定是不通过的。添加新项,加一个新的文件,名称起刚才删除文件的名字,再把刚才的内容copy进来(这里等于是重新创建了一个同样的文件),再编译,肯定通过的了。这时候执行出来的程序就是可以命中断点了!


提示:当前不会命中断点。源代码与原始版本不同.
为什么会出现呢?
原因当前大家都清楚,就是因为编译器生成的符号文件与源代码不同.
那我的代码明明已经改变并存档,并且编译了,为什么还是不同呢?
1.我想也许是没有被真正的重新生成吧,
这好办,清理解决方案,清理工程,为了更彻底,再关闭解决方案,把debug删掉,ncb文件删掉,再打开重新生成.有时候这样问题就解决了,但是我发现问题依旧,还得再想办法..
2.我又想,我的解决方案中有是不是有几个工程呢?
如果有几个工程,在其它工程中代码改变了却没有重新生成,如果这个时候下断,当前调用的模块(dll,exe)等就会出现与代码不一致了.但是我一看才知道记错了,我这个解决方案里只有一个工程的,也没有调用其它模块,就只有一个对话框而以.....再想.
3.即然VS不认为这个文件改变了,那我直接给他换个新的行吗?
我果断改掉了这个不能下断的.cpp的文件名和对应.h的文件名,并且再改掉所有调用到.h的地方(.h文件名变了当然得改).编译,调试运行,下断,终于是好了,可以下断,没有提示了.....但是.....这种方法也太不方便了吧,一个大点的工程,如果不能下断的刚好是一个常用的类,那不得累死啊...再想.
4.也想不出什么了,网上看看吧.好多方法啊...(代码文本格式问题)
前两种方法都有说,
还有就是去掉 代码一致性检查 ...我想这种方法不是我想要的,只是掩饰问题罢了,不是解决问题之道.
还有说 "编辑"-->"高级"-->"格式化选定内容"(也就是选中文本,然后按ctrl+K,ctrl+F),不过试了不管用,不过即然别人说了,肯定某种情况下是能解决问题的.
还有说可能是代码行过长,或者加了什么特殊字符的原因.
还有说用记事本重打开不能下断的文件,再另存为UNICODE编码的文件.
感觉估计是还有此道理,MS也不一定能考虑的万无一失,有可能编译器处理文本时会有点问题,并且我的代码里确实有几行代码较长,却没的换行.
先改吧,为了一次搞定这个可能的格式问题,单行过长问题改完后,再用记事本另存成unicode编码的.保存编译.......过了不长的时间,F5调试运行,再去下断,我的那个神啊.........终于能下正常断点了,不再提示了.....
总结:虽然问题是解决了,但是我还是没有想出过所以然来...虽说是通过代码的格式,编码格式改变来解决了这个问题,但是真的是格式问题吗?好像不是吧....如果格式有问题,那么我第3种方法只改文件名不应该能解决问题,因为代码文本格式没有变化啊..如果不是格式问题,但是能过改代码格式和编码方式,问题却解决了......
最终结论: 不认真的,不仔细,不为用户着想的MS啊,愿你早日破碎虚空,离开这个世界吧.
(这个问题在VC中就有的吧,现在都到VS2010了竟然还没有解决,难道是MS没有能力?我相信其能力,只是MS真的不够用心)

扩展阅读