`
huozheleisi
  • 浏览: 1237946 次
文章分类
社区版块
存档分类
最新评论

vs2005下部分断点无效的问题

 
阅读更多

这两天在vs2005下的一个project中进行debug,但是出现了一个比较奇怪的现象,绝大多数文件都可以设置断点并且可以跟进去,唯独有一个修改量比较大的.cpp文件,前几次还可以设置断点并且跟进去,后来在那个设置的任何断点都无缘无故失效了。

把整个project重新build了好几次,包括需要调用的一些第三方的.dll文件都重新生成重新link,都无法解决问题。就算强行进入这个文件,都会显示该文件与源文件不同,问是否继续。简直郁闷坏了。

后来上网查了一些解决方法,其中有一个方法有效的解决了困扰我的问题。该方法说,有可能是因为在相应的.cpp文件中有中文编码或者其他非ASCII编码,导致文件要更改为unicode格式的形式才能把信息完全保存下来。同时还提到了一个warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

然后我想起了在rebuild那个project的时候,明明见过这个warning,当时还很奇怪这个warning是干什么用的。然后想起在那个.cpp文件中有大量的中文注释,会不会是我在注释之外的地方在中文输入法的情况下输入了譬如回车换行的内容。如果有的话,那应该是紧挨着我写的注释才对。

于是我把相应的.cpp文件中的注释给删除了。然后重新编译,结果,妥了!哈哈~真是太激动了!

下面附上网上找到的方法的内容:

最近一工程中,在调试的时候,有些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,所以各种警告有些泛滥,他们又没有及时处理,这个警告就被淹没在警告堆里了……

PS:个人再加一句,修改vs2005的设置,选项->常规,将要求源文件与原始版本完全匹配的勾取消就可以了! 这一项网友反映最好不要更改。否则可能引起其他问题,毕竟vs2005默认的就是打勾的。

分享到:
评论

相关推荐

    vs 断点失效

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

    AcDown动漫下载器 v3.3源码

    新增"断点续传"特性(部分站点不受支持) 新增吐槽网(tucao.cc)下载支持 新增Acfun.tv的Flash游戏下载支持 新增“正在启动”的提示 快捷工具栏新增"删除任务和文件"选项 改动 主界面进一步进行了简化 ...

    驱动精灵(可以备份驱动,也可以升级驱动)

    2、修正了完全更新功能中,部分网络状况不佳的用户在下载完成时有时点击安装按钮无效,必须重启软件的问题。 3、修正了微调模式下部分驱动有时会不能正常取消的问题。 4、修正程序在网络不畅的情况下有时会不稳定的...

    安卓毕业设计加源码-get_jobs:利用线程池,协程,异步的方式,爬取各大招聘网站的数据

    优化页码问题,去除无效(不必要)的页码,节省爬取时间 支持断点续爬功能 优化爬取时间,以协程,线程池,线程池+异步的三种方式提升速度(可以自行选择不同的运行方式) 简介: 利用爬虫技术抓取各大平台的

    大工19春《计算机组成原理》在线作业3参考答案.doc

    为了保证中断服务程序执行完毕以后,能正确返回到断点继续执行程序,必须进行现场 保存操作。 A.对 B.错 正确答案:A 4.电源故障中断属于硬件故障中断。 A.对 B.错 正确答案:A 5.算术操作溢出和校验错都属于外部事件...

    OllyDBG 入门教程(多模式版) [评价可免费]

    Q:用OD调试一些加壳程序,如Themida等,可能你会发现下断后(包括硬件断点),程序跑到断点时,OD会出现假死现像。 A:打开OD配置文件ollydbg.ini,你会发现:Restore windows= 123346 //这个Restore windows可能会...

    围棋学习v1.38版开源共享

     1、修正了人机对局时悔棋一手后单击棋盘下子无效的操作方法提示。  2、修正了下棋子时提死子误提本方棋子的Bug。  3、优化了人工智能一步被吃算法设计,使之更简明。  4、优化了人工智能两步吃子算法设计,使之...

    单片机应用技术考试试题

    A、单步调试 B、跟踪调试 C、断点调试 D、连续运行调试 9、在片外扩展已骗8K的EPROM 2764 需要( )根地址线。 A、11 B、12 C、13、 D、14 10.启动ADC0809进行A/D转换时,使用( )指令。 A、MOVX @DPTR,A B、MOVX ...

    planner:暗黑破坏神2角色规划师

    用于不使用常规断点的技能按类型分类的攻击损害细目技能效能(dps,受影响区域,移动能力) 完整的GUI库存/存储自定义项目创建和词缀编辑自定义项目池保存个别任务的选项严格字符验证的选项(防止无效字符状态,...

    动网论坛php 2.0 Sharp GBK

    修复部分BUG列表 1.勋章、银行导航不显示 2.恢复论坛版块贴子统计功能 3.CC视频全屏浏览链接错误 4.贴子列表超连接去掉title 5.修改帖子标题,在帖子列表显示的标题没更新 6.屏蔽帖子无效,屏蔽贴会继续显示 7.设置总...

    维宏Ncstudio V5.4.57

    更正了在被率为0的情况下,仍然可以手动的问题。 改进了紧停释放内部实现方式。 修正了驱动程序在某些板卡初始信息情况下无法启动Windows的情况(V5.4.33引入)。 用户参数界面上增加了PLT参数:包括二维PLT深度和...

    漫游浏览器 v3.5.0.2120.rar

    漫游浏览器是一款集多窗口,多线程,智能屏蔽等功能于一体的大众浏览器,具有方便,快速,稳定,安全,易用,绿色等特点,他完全免费...修正部分快捷键无效的BUG 修正两处退出程序时可能报错的BUG 修正标签菜单的BUG

    微机课程设计

    答:当RESET来后(RESET起码维持四个时钟周期的高电平),CPU便结束当前操作,对标志寄存器、IP、DS、SS、ES及指令队列清零,而将CS置为0FFFFH,所有三态输出线被设置为高阻状态,非三态输出线无效。 经过7个时钟...

    Ollydbg动态监听

    OllyDbg可以在没有调试信息或函数过程使用非标准的开始部分[prolog]和结尾部分[epilog]的情况下,对递归调用进行回溯。 配置 有多达百余个选项用来设置OllyDbg 的外观和运行。 数据格式:OllyDbg 的数据窗口能够...

    vue-responsive-grid-layout:Vue Repsonsive网格布局

    它的响应能力基于断点(类似于Bootstrap)。 它基于 消息 现在,您可以进行常规布局和响应式布局。 它也可以与Vuex一起使用。 并且它部分地用Typescript编码。 从1.1.6开始可用的打字稿类型* .d.ts 演示版 具有...

    易语言程序免安装版下载

    6) 修改MYSQL支持库跨静态编译的EXE和DLL传递连接句柄和记录集句柄无效的BUG(改动较大,可能会产生兼容性问题,我们已经仔细测试,也请使用到此库的用户帮助我们多多测试,以便及早发现问题,谢谢) 7) 其它修改 ...

    C语言程序设计标准教程

    在很多情况下都不要求无参函数有返回值, 此时函数类型符可以写为void。 我们可以改为一个函数定义: void Hello() { printf ("Hello,world \n"); }  这里,只把main改为Hello作为函数名,其余不变。Hello 函数是...

Global site tag (gtag.js) - Google Analytics