VS 断点无法调试学习总结

来源:互联网 发布:张信哲没有人知的故事 编辑:程序博客网 时间:2024/05/21 11:14

Visual Studio 2010 断点无法调试

 
一.断点无法调试
1.观察是否编译Release版本。
2.再看“工具—>调试—>常规”下,将“要求源文件与原始版本完全匹配”这一项打钩,重新编译。
3.还是不行, 在不能调试代码文件上全选,然后点击“编辑—>高级—>设置选定内容的格式”,然后保存,再一次重新编译。
这时候差不多都可以解决断点不可调试的问题。 
========

当前不会命中断点 还没有为该文档加载任何符号

 
相信很多人在网页编程时都遇到过这个问题,就是设置断点时给出提示,之后不能选中。我今天也碰到这个问题了,足足折磨了我一天。设置是debug没错,我也没有找到“C/C++->常规->调试信息格式”这个东东,估计是C++里的设置,我用的是C#。”将”要求源文件与原始版本完全匹配”的勾取消“我也试了还是不行,webconfig里的debug设置也是true。折腾了一天才发现,我要调试的文本所处的文件夹里还有一个webconfig,这里的debug是false。我上网找了一下,才知道原来最外边的webconfig是总的。文件夹内部也可以设webconfig,这个webconfig继承了总webconfig的信息的基础上还拥有子文件夹自己的属性。所以导致我的总webconfig虽然debug是true。但因为文件夹内的程序要参照内部webconfig。所以还是不能正常设置断点进行调试。真是粗心惹的祸。


万恶的调试不到断点。把vs的各种选项翻来复去的勾来勾去。想尽了办法,已用过的办法有:


        一、删除引用项目的debug


        二、配置管理器中把所有项目的“生成”打勾、“配置”全部选成“debug“,切忌release


        三、配置管理器中“活动解决方案配置”、新建一个方案


        四、将引用目录统一设到某个目录,防止没有引用到最新的(源码与dll版本不匹配)


        五、工具、选项、调试、常规中的“要求源文件和原始版本完全匹配”的勾去掉


        五种办法都用过了。还是没有用。


        最后偶然想到,出现这个问题的原因基本上有两个:


        一、要调试的dll不在调试进程的进程空间,调不到


        二、源代码使用的dll与调试的源代码的版本不对,自然调试不到


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


http://johnsmithblog.blogbus.com/logs/15017286.html
VS2005中设置的断点无效:“当前不会命中断点,还没有为该文档加载任何符号”。折腾了一阵,其实问题主要出在没有生成调试信息。解决方法如下:
(1)项目-〉属性-〉配置属性-〉C/C++-〉常规-〉调试信息格式,这里不能为“禁用”。
(2)项目-〉属性-〉配置属性-〉链接器-〉调试-〉生成调试信息,这里设为“是”。


(3)2005默认的MFC程序是使用动态MFC库(Use   MFC   in   a   Shared   DLL)来链接的   
而动态MFC库使用的是Multi-threaded   DLL   (/MD)   
由于XP对于PE文件格式监测更加严格.   
就会导致部分使用多线程DLL的可执行文件在调用的时候出错   
修改项目属性的编译开关   
Project->Property->configuration   Properties->C/C++->Code   Generation->Runtime   Library   
修改成Multi-threaded   (/MT)


希望这篇文章能帮到和我遇到同样问题的人:)
========

当前不会命中断点,没有与此行关联的可执行代码



情况描述:
VS2010,写的C++,代码没有任何问题。
debug的时候断点全都变成空心,提示:


当前不会命中断点。没有与此行关联的可执行代码。
可能的原因包括:预处理器指令或编译器/连接器优化。


在网上找各种方法都不行。后来自己解决了。


解决方法:
我是64位机器,解决方案平台本来是win32的。我给新建了一个,x64的,配置都复制win32的。


修改完以后,就可以debug了。。


没有去深究原因,希望能给你帮助。
========

“当前不会命中断点。源代码与原始版本不同”的问题的有效解决办法



    开发时有一个工程的一个文件的断点无效,VS 2005提示说当前不会命中断点。源代码与原始版本不同,请在断点选项里设置允许源代码与原始版本不同。这个是针对单个断点进行设置。如果要对所有的断点进行设置,则要在“工具”——〉“选项”——〉“调试”——〉“要求源文件与原始版本完成匹配”去掉勾。


    实际上有比这个办法更好的办法,就是将出问题的文件用notepad打开,然后另存为Unicode编码,覆盖原来的文件。


     网上另外有一种办法是:
通过重新格式化出问题的源文件亦可以解决,即在VS2005中选择 “编辑”——〉“高级”——〉“设置选定内容的格式”。
========

当前不会命中断点,源代码与原始版本不同

提示:当前不会命中断点。源代码与原始版本不同.


为什么会出现呢?


原因当前大家都清楚,就是因为编译器生成的符号文件与源代码不同.


那我的代码明明已经改变并存档,并且编译了,为什么还是不同呢?


1.我想也许是没有被真正的重新生成吧,


   这好办,清理解决方案,清理工程,为了更彻底,再关闭解决方案,把debug删掉,ncb文件删掉,再打开重新生成.有时候这样问题就解决了,但是我发现问题依旧,还得再想办法..


2.我又想,我的解决方案中有是不是有几个工程呢?


  如果有几个工程,在其它工程中代码改变了却没有重新生成,如果这个时候下断,当前调用的模块(dll,exe)等就会出现与代码不一致了.但是我一看才知道记错了,我这个解决方案里只有一个工程的,也没有调用其它模块,就只有一个对话框而以.....再想.


3.即然VS不认为这个文件改变了,那我直接给他换个新的行吗?


  我果断改掉了这个不能下断的.cpp的文件名和对应.h的文件名,并且再改掉所有调用到.h的地方(.h文件名变了当然得改).编译,调试运行,下断,终于是好了,可以下断,没有提示了.....但是.....这种方法也太不方便了吧,一个大点的工程,如果不能下断的刚好是一个常用的类,那不得累死啊...再想.


4.也想不出什么了,网上看看吧.好多方法啊...(代码文本格式问题)


   前两种方法都有说,


   还有就是去掉  代码一致性检查  ...我想这种方法不是我想要的,只是掩饰问题罢了,不是解决问题之道.


   还有说 "编辑"-->"高级"-->"格式化选定内容"(也就是选中文本,然后按ctrl+K,ctrl+F),不过试了不管用,不过即然别人说了,肯定某种情况下是能解决问题的.


   还有说可能是代码行过长,或者加了什么特殊字符的原因.


   还有说用记事本重打开不能下断的文件,再另存为UNICODE编码的文件.


   感觉估计是还有此道理,MS也不一定能考虑的万无一失,有可能编译器处理文本时会有点问题,并且我的代码里确实有几行代码较长,却没的换行.


  先改吧,为了一次搞定这个可能的格式问题,单行过长问题改完后,再用记事本另存成unicode编码的.保存编译.......过了不长的时间,F5调试运行,再去下断,我的那个神啊.........终于能下正常断点了,不再提示了.....
========
0 0