VS2008中一个CPP文件中断点突然失效
来源:互联网 发布:大数据技术发展现状 编辑:程序博客网 时间:2024/05/14 02:02
最近一工程中,在调试的时候,有些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,所以各种警告有些泛滥,他们又没有及时处理,这个警告就被淹没在警告堆里了……
最简单的解决方法就是全选中cpp文件中所有的代码,然后Alt + F8,重新格式化。马上OK!
- VS2008中一个CPP文件中断点突然失效
- CPP文件中断点失效的解决办法
- VS2010 调试中断点突然失效的解决办法
- VC中断点失效问题
- MyEclipse 中 SVN 突然失效
- myeclipse中svn突然失效问题
- 修改css文件后,jsp页面在IE8中预览部分样式突然失效的原因
- QT+VS2008 CPP文件 自定义槽
- QT+VS2008 CPP文件 自定义槽
- Qt Creator 中,如何更改h,cpp,ui的文件并不让ui失效
- DLL调试中断点失效的问题
- vs2008突然不能使用查找功能了(找不到要查找的文件 查找进行的过程中被停止)
- vs2008突然不能使用查找功能了(找不到要查找的文件 查找进行的过程中被停止)
- (vs2008链接错误LK200x:xxx在yyy.obj中已定义或xxx在yyy中以被引用):一个全局的变量想在多个cpp文件中使用
- 进入不了cu文件中断点
- js为什么突然失效?
- VS2008突然关闭
- [转]VS2008 在h与cpp文件间切换快捷键
- php smarty 缓存 2
- 标准C++中string类用法总结
- 判断为空简写
- Mysql中文乱码Linux下
- VBS获取当前登录的用户全名和邮件地址
- VS2008中一个CPP文件中断点突然失效
- 图说样本与总体关系
- Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization.
- "超时时间已到。在操作完成之前超时时间已过或服务器未响应"的解决方法
- Linux-top
- Ubuntu12.04不能连接小米开发
- linux文件无法删除-rw-r--r-- (用lsattr chattr设置特殊属性)
- mahout源码编译重新打包过程
- Console命令详解,让调试js代码变得更简单