Creative Commons License
本Blog采用 知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议 进行许可。 —— Fox <游戏人生>

游戏人生

游戏人生 != ( 人生 == 游戏 )
站点迁移至:http://www.yulefox.com。请订阅本博的朋友将RSS修改为http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

VS2005断点失效的问题

Posted on 2009-01-04 11:04 Fox 阅读(14504) 评论(26)  编辑 收藏 引用 所属分类: T技术碎语

VS2005下使用VC,部分断点无效,显示『当前不会命中断点。还没有为该文档加载任何符号』。

试过以下一些方法:

1、无效断点所在的项目和启动项目的设置:项目->属性->配置属性->C/C++->常规->调试信息格式,这里不能为『禁用』;

2、项目->属性->配置属性->链接器->调试->生成调试信息,这里设为『是』;

3、C/C++->优化->优化选择『禁用』;

4、删除解决方案下的.ncb文件;

5、工具->选项->调试->『要求源文件与原始版本完成匹配』去掉勾;

6、最后在上述设置的情况下,重新编译整个解决方案;

7、回过头来,发现原来是一段不会被执行到的代码……

看来,除了VS本身会有bug,自己的代码还是要多检查一下。

Feedback

# re: VS2005断点失效的问题  回复  更多评论   

2009-01-04 17:39 by hello
这个不是VS的BUG吧,可能不满足 要求源文件与原始版本完成匹配,或者 模块根本就没加载,当然没法调试。

# re: VS2005断点失效的问题  回复  更多评论   

2009-01-04 19:23 by CK
博主,这个根本不是Visual Studio的BUG.

微软的这个IDE是非常强大的,主要是因为你没有了解它的编译原理.
Visual Studio并不是使用g++来编译的,它有自己的编译器,其中有很多不同的编译模式.比如默认的有三种,比较常用的就是Debug,Release模式.

当你使用Debug,即调试模式时,不会出现任何断点失效的问题.想必你使用的编译模式是Release.这个模式使用了非常多的编译优化.在写程序的时候你可能看不出来,其实你在程序运行时随便在哪里设一个断点停下,然后它会自动给你汇编代码,仔细看看,你会发现它为你做了非常多的常数优化.

比如除法,a/=7,你看看它的汇编代码,是进行了一系列的乘加操作,最终得出了正确答案,这个比一个除法的汇编指令快多了.不过当你添了些代码时,想调试它,它因为一些优化原因,就忽略了这些新加入的内容.

总的来说,当你调试程序时,一定要记得使用DEBUG模式,它不会做什么优化,调试没有任何问题.当要输出最终产品,即可执行文件或库时,开启Release模式,并且让整个解决方案和程序全部重新生成,这样才会正确执行,生成的东西才是最优化的,并且程序体积也比DEBUG生成的小很多.

# re: VS2005断点失效的问题  回复  更多评论   

2009-01-05 08:59 by Kevin Lynx
这种情况不解决办法有 很多。你这个方法我没用过。最简单的方法就是ctrl+a, ctrl+f重新格式化这个‘不可调试’的CPP文件,然后编译该CPP文件,一般就可以解决。当然,有时候也无法解决。
@CK
这里说的就是DEBUG模式。

# re: VS2005断点失效的问题  回复  更多评论   

2009-01-05 09:49 by zuhd
PDB文件失效了,Clean->Rebuild即可

# re: CK  回复  更多评论   

2009-02-11 17:25 by zwj
CK,你说话就像放屁,
“当你使用Debug,即调试模式时,不会出现任何断点失效的问题”,你试过吗?,我就在debug模式下,确实是运行不到断点!!!

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2009-03-31 08:31 by jason
在Debug模式下,我也出现过楼主说的现象,不过个人觉得有以下问题。

1、无效断点所在的项目和启动项目的设置:项目->属性->配置属性->C/C++->常规->调试信息格式,这里不能为『禁用』;
回:默认的Debug模式,这个就是非禁用状态。

2、项目->属性->配置属性->链接器->调试->生成调试信息,这里设为『是』;
回:Debug模式的默认值。(手抽和VS版本混乱者排除)

3、C/C++->优化->优化选择『禁用』;
回:Debug模式的默认值。(手抽和VS版本混乱者排除)

4、删除解决方案下的.ncb文件;
回:这个方法比较管用。

5、工具->选项->调试->『要求源文件与原始版本完成匹配』去掉勾;
回:这个不建议使用,不然编译出来的版本可能不是你最新的代码编译出来的。
而且你也很难找问题,强烈BS这个方法。

6、最后在上述设置的情况下,重新编译整个解决方案;
回:这个方法比较管用。

7、回过头来,发现原来是一段不会被执行到的代码……
回:这个方法最管用^_^。

纯属个人意见,呵呵。

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2009-04-30 12:01 by zz
这个根本不是Visual Studio的BUG。
说上面这句话的人,应当是没遇到过这个问题,或者根本就不知道调试是什么。

# re: VS2005断点失效的问题  回复  更多评论   

2009-04-30 22:26 by CK
哦?那请问叫做ZZ的,要是可以,请你拿出一个实例来吧,空口的话不要直接就说“根本就不知道调试是什么”,或许您更不知道调试是什么吧

# re: VS2005断点失效的问题  回复  更多评论   

2009-05-19 17:17 by 灰熊
确实在vs2005下碰到过debug模式下断点无法命中的问题,后来我发现是因为pdb符号文件不小心被挪到另外的位置了。可以用二进制编辑工具打开生成的可执行文件,里面有pdb文件的路径信息,pdb文件实际存放的路径要和里面的信息一致。

# re: VS2005断点失效的问题  回复  更多评论   

2009-05-21 15:14 by 做得到
@zwj
对我也遇到了

# re: VS2005断点失效的问题  回复  更多评论   

2009-06-18 18:09 by asdf
asdf

# re: VS2005断点失效的问题  回复  更多评论   

2009-08-18 01:28 by playgamezx
楼主这个帮助其实是写给新手的,什么是调试怎么调?也许对于有人手把手帮你你可能掌握得比较快,但事实上VS2005默认的调试方式在调试c++程序时根本不会命中断点,不管你们用什么办法,改为debug也好按楼主方法逐条设置也好,总而言之就是把调试打开了
但我不明白CK你是用的是什么方法,具体怎么操作的。我的VS每次新建工程调试C++程序都要按照楼主的方法重新设置才行,而我在工程,选项中即使选择了debug依然不能调试,只有全改才行
关于jason说的默认为什么什么不知你是怎么看到弄得

# re: VS2005断点失效的问题  回复  更多评论   

2009-08-18 01:44 by playgamezx
在附上最新的解决方案
希望能够帮助广大的编程入门者

如果你按照楼主的方法修改正确说明一个问题
你建错工程了!
建工程时如果你想做一个简单的控制台程序,要选择控制台程序
而不是选择空项目!
当选择控制台程序后进入的向导里面选择空项目。
这个问题即使是经验多年的程序员一般也无法帮你解决。楼主的方法是通过能调试的工程和不能调试的工程对比出来的,比较笨也比较难记,取舍自己决定
装比的自重

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2009-09-27 21:46 by chris
那个CK是不是认为VISUAL STUDIO没有BUG?
我就在DEBUG下遇到了这个问题,也按照楼主的方法解决了!
你还别太自信的好。

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2009-09-28 08:18 by CK
我的意思不是Visual Studio没有BUG
再完美的程序也有可能有BUG

我的意思是按楼主以及底下的一些回复
你们自己看看,应该是自己的工程属性和设置等问题,而不是说这个是VS的BUG

# re: VS2005断点失效的问题  回复  更多评论   

2009-09-28 10:26 by Doit
我也遇到此问题过,按照LZ的方法基本可以解决

# re: VS2005断点失效的问题  回复  更多评论   

2009-09-28 10:31 by Doit
不过Vs的BUG确实存在的.....有些问题很神奇也很无奈啊...也许是本身的水平问题吧...

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2009-11-11 18:16 by zq
每次在vss上下载后打断点无效,必须改动下OnInitDialog 函数的内容,再打个断点才能进入其它断点

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2010-03-10 15:57 by 1
VS确实很多bugs,楼主的方法确实比较实用
中国的程序员别说解决问题,这里就开始骂人了,一群垃圾

# re: VS2005断点失效的问题  回复  更多评论   

2010-04-10 15:56 by none
经过验证,CK的确在放屁,鄙视一下。

# re: VS2005断点失效的问题  回复  更多评论   

2010-04-10 16:01 by CK
把你运行不到断点的代码贴上来吧,我们看看是谁在放P

你连代码都不敢贴还说别人放P,自己SB啊

# re: VS2005断点失效的问题  回复  更多评论   

2010-04-10 16:05 by CK
而且已经说了,这些是你工程设置的问题,而不是所谓的Visual Studio的BUG,我上面表达的意思就是这根本不是BUG,而是设置的问题

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2010-04-12 15:57 by bobby
CK写的程序比较少,这种问题确实存在,尤其在跨平台的库引用上。。。楼主的方法能解决部分问题,有的时候也试试ctrl+a 然后ALT F8吧,我想这是Kevin Lynx 的意思

# re: VS2005断点失效的问题  回复  更多评论   

2010-06-16 17:58 by Jack.wgm
CK说的是对的,这不属于vs的bug.肯定是工程设置的问题,或者是pdb调试信息数据库位置或文件错误导致的,而pdb文件出现这种问题很可能是用户自己非正常关闭vs或计算机导致的.
但vs确实是有bug的,我所知道的,从vs6到vs2010都一直存在多线程断点调试bug导致系统死锁的bug,而这现象是随机的,有时候很频繁,有时候没有.

# re: VS2005断点失效的问题  回复  更多评论   

2010-06-22 14:37 by 景涛他爹
楼主有没有写过程序,这个是从哪儿转来的吧!

# re: VS2005断点失效的问题[未登录]  回复  更多评论   

2011-06-12 20:08 by no7dw
这个问题我遇过,我的两个项目dll mfc 因跨项目调试,原因是dll 版本不与原码不一致

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理