浪迹天涯

唯有努力...
努力....再努力...

vs2005奇怪的断点无效问题

最近一工程中,在调试的时候,有些cpp文件都可以设置断点并且跟进去,但是有一个cpp文件总是不能设置断点,提示“当前不会命中断点。源代码与原始版本不同。” 重新更换过n次文件都不起作用,然后在goole搜索此类类似问题,找到下篇文章,然后我把那个cpp文件用记事本打开,另存为unicode格式,再重新编译,最后问题解决!也可以更改vs2005的设置,选项->常规,将要求源文件与原始版本完全匹配的勾取消就可以了!

清理整个解决方案,重新编译,无效。删除整个目录,从SubVersion服务器上Down下来重新来过,一样无效。上网搜索,未果。郁闷地放手了。

修一个Bug,提交,然后更新了一下,编译,运行,发现我也染上这个症状了——只有那个文件无法插入断点。倒有些安心了,看来不是VC的Bug,而是源代码的问题。把这个文件回滚到更新前的版本,果然就没问题了。更新到下一个版本,问题就出来了。查看改动,没瞧出来什么。忽然发现有一个不常见的警告:“warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”。呵呵,应该就是它了。

警告有两个,一个是文件的,不带行号,另一个带行号。那一行是一个case语句,最后加了一句中文注释。把注释删掉,问题解决。把代码拷贝到UltraEdit中看十六进制代码,逐个字节滤过去,没发现什么奇怪的。然后开始逐步逼近问题,把注释前后汉字逐个拿掉,直到问题消失,最后剩下来的核心词是“即时消息”,搜索这个词,果然在整个项目里只有一个。在这个词前面增、删一个空格,问题就消失。郁闷的是把同一行代码拷贝到其他文件、位置都不会有这个问题。

恢复所有改动,更新到最新版本,问题又变了:警告只剩下一个,没了行号!用插入空格的方法定位问题,发现错误向前移动了几行。而且这次就算把警告消掉,还是无法添加断点。尝试了好一会儿没有效果,干脆用VC直接把整个文件格式化了一次,断点又可以用了。而且,这次再怎么插入空格都不会有C4819了。对比了一下修改前后的文件,依然没有什么发现。

搜索了一下,其他人也遇到过C4819,有的是因为Unix换行格式,甚至boost库中一个非ASCII作者名都会引发这个错误,但是这里应该是中文双字节字符错位的问题吧。因为警告等级开到了4,所以各种警告有些泛滥,他们又没有及时处理,这个警告就被淹没在警告堆里了……

 

 

posted on 2008-01-24 14:33 浪迹天涯 阅读(20040) 评论(15)  编辑 收藏 引用 所属分类: C++

评论

# re: vs2005奇怪的断点无效问题 2008-01-24 16:14 qwerqw

good,我也遇到过  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-01-24 16:58 浪迹天涯

呵,好久以前就遇到过这个问题,将解决方法发到MSN Space上了。MSN Space速度太慢,但是每天搜索这个问题的人还很多,所以就发到这个CPP Blog上来了,希望能给大家一个参考!  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-01-24 17:41 梦在天涯

en ,不错,很好的建议哦!

很有用啊!

  回复  更多评论   

# re: vs2005奇怪的断点无效问题[未登录] 2008-01-25 21:08 koobin

我也遇到过,页面的编码不对,将页面另存为的时候选择高级,把编码改一下就好了。  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-01-30 09:23 追梦时代

我也遇到过相同的问题,也是断点无法跟进。解决方法是在断点之前加上MessageBox就可以了,原理未知  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-01-30 09:53 浪迹天涯

断点无法跟进,弹出“没有可用于当前位置的源代码”时,有时候把这个函数删除了,然后重新添加一次就可以解决。  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-04-11 10:25 freewave

保存成Unicode编码就解决问题了。
thanks!   回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-07-16 08:37

我们也发现这个问题,发现中文版VC出问题概率更大些  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-07-30 09:27 zl

工具->选项->调试->常规,将”要求源文件与原始版本完全匹配”的勾取消就可以了!  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-08-24 16:21 包岩峰

我试过了,把BIN目录下所有引用删除,重新添加引用,再重新生成解决方案,OK!!!  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-12-04 16:16 小猪

恩,刚试过了,把其中一个函数的调用删除,再调用一次就好了  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-12-04 16:19 小猪

我写了一个函数:private void ChangeBusStatus(){}
在另外一个按钮事件里调用了它。按照刚才那位仁兄的说法,我把它在事件中的调用: ChangeBusStatus();删除了,然后重新写一遍,问题就解决了。不知道原因是什么。在我这里没有提示任何错误或警告。  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2008-12-04 16:24 小猪

问题出现后,我将断点位置换了地方,仍然出现源文件与原始版本不匹配的提示。我不知道具体出问题的函数是哪个,只是凭感觉认为是private void ChangeBusStatus(){}。一试就成功了,所以我不知道就是这个函数出的问题,还是随便改个函数就能解决问题。  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2013-05-31 15:46 peach5460

嗯,改了页面编码以后就好了...  回复  更多评论   

# re: vs2005奇怪的断点无效问题 2013-06-28 16:46 wenmhappy

我也遇到此类问题,打代码如下:

#if 0
....

#else
if ( ){
#if 1
> .... // 设了断点,无效
#endif

}
else{
....
}
#endif

把断点所在的#if 1 #endif 去掉后,该源文件的其他所有断点都可以用了。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(22)

随笔分类(30)

随笔档案(29)

文章分类

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜