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

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断点失效问题解决方案

    通过以上分析和解决方案,你应该能够解决大部分VS断点失效的问题。记住,调试是开发过程中的重要环节,保持断点的有效性对提升开发效率至关重要。如果你遇到的是更复杂的情况,可能需要更深入地了解VS的调试机制,...

    vc做的ocx控件,ie下断点调试问题

    标题“vc做的ocx控件,ie下断点调试问题”所描述的情况是一个典型的问题,即OCX控件在VC(Visual C++)的测试容器中可以正常进行断点调试,但当它被嵌入到IE浏览器中时,无法进入断点。这通常涉及到调试器的设置、IE...

    SpringBoot项目设置断点debug调试无效忽略web.xml问题的解决

    本文主要关注两个问题:SpringBoot项目设置断点进行debug调试无效以及由于缺少web.xml文件导致的错误。以下是对这两个问题的详细解答。 首先,让我们来解决断点debug调试无效的问题。在SpringBoot项目中,如果你...

    用Java 实现HTTP断点续传技术文档【附实例代码】

    断点续传的基本思想是:当文件下载到一定程度时发生中断,则在下次下载时可以从已下载的部分之后继续下载剩余部分,而不是从头开始下载。这一过程涉及到了服务器与客户端之间的通信协议,尤其是HTTP协议的支持。 ##...

    C# 断点续传下载文件 实例源码(网络操作)

    断点续传技术的基本原理是通过记录已下载文件的部分信息,如已下载的字节数,以便在下次连接时能够从已下载的最后一个字节位置继续。这种方式提高了下载效率,减少了网络带宽的浪费,并提高了用户体验。 实现C#断点...

    Android应用源码Android平台下通过HTTP协议实现断点续传下载.zip

    首先,源码是实现断点续传下载的核心部分。断点续传技术允许用户中断下载后,从上次停止的地方继续,而无需重新开始。在Android中,这通常涉及到以下几个关键组件和概念: 1. **HttpURLConnection或OkHttp**:在...

    php支持断点续传的下载远程文件的类.zip

    5. **错误处理**:如果服务器不支持断点续传或者请求的范围无效,服务器可能会返回状态码416(Requested Range Not Satisfiable)。此时,客户端需要重新开始下载或提示用户。 在描述中提到的PHP类可能实现了上述...

    Myeclipse+weblogic断点调试jsp.pdf

    在IT开发领域,调试是解决bug和优化代码的关键环节。对于使用Myeclipse集成...通过以上步骤,你就可以在Myeclipse中有效地进行Myeclipse+Weblogic的JSP和Java代码断点调试,从而高效地定位和解决问题,提升开发效率。

    c#.net名称以无效字符开头...

    在使用Visual Studio 2005 Express进行Web应用开发过程中,遇到一个常见的错误提示:“名称以无效字符开头”。该错误通常发生在尝试通过IE浏览器访问本地开发服务器上的网页时,具体表现为在地址栏输入`...

    详解Intellij IDEA 2017 debug断点调试技巧(总结)

    5. Cancel All Breakpoints:取消所有断点,让所有断点无效。 6. Restore Layout:恢复布局,回到初始状态。 7. Jump to Line:跳转到当前代码所执行的地方。 8. Step Over:下一步,一行行的往下走。 9. Step ...

    vs2005常用快捷键(20211008074659).pdf

    Ctrl+F9: 使断点无效,调试时忽略该断点。 Ctrl+Shift+F9: 删除所有断点。 F10: 单步跳过,调试时执行当前语句,跳过函数调用。 Ctrl+F10: 运行到光标处,从当前位置开始继续执行直到到达光标所在行。 F11: 单步进入...

    PHP实现下载断点续传的方法

    断点续传是一种允许用户在因网络问题或其他原因中断下载后,从上次中断的位置继续下载的技术,提高了大文件下载的效率和用户体验。 首先,我们需要确保文件存在。通过`is_file()`函数检查文件路径是否指向一个实际...

    Python使用urllib2模块实现断点续传下载的方法

    在某些情况下,我们可能需要实现断点续传下载功能,这在处理大文件时尤其有用,因为它允许我们在网络中断后从上次停止的地方继续下载,而不是重新开始。下面我们将详细讲解如何使用`urllib2`模块实现断点续传下载。 ...

    编码不能没调试,调试不能没断点

    编码和断点调试是软件开发和程序设计中不可或缺的一部分。断点是一种常用的调试技术,通过设置断点,可以控制仿真器在指定的位置停止运行,然后分析当前的运行状态,判断程序中可能存在的问题或调试整个系统的硬件。...

    PHP简单实现断点续传下载的方法

    断点续传是一种在网络上传输大文件时非常实用的技术,它允许用户在因网络问题中断下载后,从上次中断的地方继续下载,而不需要重新开始。在PHP中实现断点续传下载,主要涉及到HTTP协议中的Range头信息以及文件处理...

    VS200平台C#编写闹钟

    在本项目中,我们探讨的是一个使用C#编程语言在Visual Studio ...同时,熟练运用VS2005的调试工具将有助于你找出并修复程序中的问题。尽管这个项目还有待完善,但它为初学者提供了一个实践C#和Windows编程的好机会。

    Android(Java)下载断点续传的实现

    在Android(Java)环境下,实现下载断点续传是一项重要的功能,它允许用户在中断下载后从上次停止的位置继续下载,提高用户体验。以下是对标题和描述中知识点的详细解释: ### 1. 追加文件 在实现断点续传时,你...

    解决Hibernate4执行save()或update()无效问题的方法

    总结来说,解决Hibernate4执行`save()`或`update()`无效问题的方法包括: 1. 检查主键设置:确保主键字段有正确的注解和配置,如`@GeneratedValue`和`@Id`。 2. 确认事务管理:确保操作在事务范围内,方法上添加`@...

    vc调试技能

    本文将深入探讨在VC6.0、VS2008和VS2010环境下进行调试的各个方面,以及如何有效地运行和解决调试过程中遇到的问题。 首先,让我们从基础的VC调试入门开始。调试是查找和修复代码错误的过程,对于新手开发者来说,...

Global site tag (gtag.js) - Google Analytics