VS2010 单步调试问题


debug之前我打了几个断点

开始调试后,第二个断点消失了,并且单步调试也走不到那个变量了

6 个解决方案

#1


总结了一下不能调试的各种可能原因:

    1.解决方案配置是 Debug ,但没有在工程属性页中“Alt+F7”->“配置属性”->“C/C++”->“常规”->“调试信息格式”,选择“用于“编辑并继续”的程序数据库(/ZI)”。另外,在“配置属性”->“链接器”->“调试”->“生成调试信息”中,选择“是”。

    2.解决方案配置是 release ,直接F5调试就可以,VS会提示你“没有找到调试信息,要继续调试吗?”,选择“是”即可。

    3.检查工程所在路径是不是有中文,有VS不支持中文路径的可能(参照http://blog.csdn.net/red_hope/archive/2007/10/20/1833916.aspx的经验)。

    4.删掉.ncb和.opt,rebuild all。

  5.看是否有:“warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告,把那个cpp文件用记事本打开,另存为unicode格式,再重新编译。(参照http://www.cppblog.com/qiujian5628/archive/2008/04/11/41806.html vs2005奇怪的断点无效问题 )

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

  呵呵,暂时就这些了,欢迎朋友们补充:)

 

这是在cppblog看到的另一遍文章:



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

另也有:

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

 

或者在call stack中右键设置调用断点位置,详见:如何:编辑断点位置

#2


重新编译下在debug,可能是您修改后代码和symbols不一致

#3


引用 1 楼 lhfslhfs 的回复:
总结了一下不能调试的各种可能原因:

    1.解决方案配置是 Debug ,但没有在工程属性页中“Alt+F7”->“配置属性”->“C/C++”->“常规”->“调试信息格式”,选择“用于“编辑并继续”的程序数据库(/ZI)”。另外,在“配置属性”->“链接器”->“调试”->“生成调试信息”中,选择“是”。

    2.解决方案配置是 release ,直接F5调试就可以,VS会提示你“没有找到调试信息,要继续调试吗?”,选择“是”即可。

    3.检查工程所在路径是不是有中文,有VS不支持中文路径的可能(参照http://blog.csdn.net/red_hope/archive/2007/10/20/1833916.aspx的经验)。

    4.删掉.ncb和.opt,rebuild all。

  5.看是否有:“warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告,把那个cpp文件用记事本打开,另存为unicode格式,再重新编译。(参照http://www.cppblog.com/qiujian5628/archive/2008/04/11/41806.html vs2005奇怪的断点无效问题 )

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

  呵呵,暂时就这些了,欢迎朋友们补充:)

 

这是在cppblog看到的另一遍文章:



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

另也有:

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

 

或者在call stack中右键设置调用断点位置,详见:如何:编辑断点位置
谢谢你的解答,很遗憾我按照你说的都试了,还是不行,单步调试,它直接从第一个断点跳到第二个,中间的变量都不操作

#4


引用 2 楼 LCL_data 的回复:
重新编译下在debug,可能是您修改后代码和symbols不一致
试过了,还是不可以

#5


搞清楚了,是文件权限问题

#6


引用 1 楼 lhfslhfs 的回复:
总结了一下不能调试的各种可能原因:

    1.解决方案配置是 Debug ,但没有在工程属性页中“Alt+F7”->“配置属性”->“C/C++”->“常规”->“调试信息格式”,选择“用于“编辑并继续”的程序数据库(/ZI)”。另外,在“配置属性”->“链接器”->“调试”->“生成调试信息”中,选择“是”。

    2.解决方案配置是 release ,直接F5调试就可以,VS会提示你“没有找到调试信息,要继续调试吗?”,选择“是”即可。

    3.检查工程所在路径是不是有中文,有VS不支持中文路径的可能(参照http://blog.csdn.net/red_hope/archive/2007/10/20/1833916.aspx的经验)。

    4.删掉.ncb和.opt,rebuild all。

  5.看是否有:“warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告,把那个cpp文件用记事本打开,另存为unicode格式,再重新编译。(参照http://www.cppblog.com/qiujian5628/archive/2008/04/11/41806.html vs2005奇怪的断点无效问题 )

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

  呵呵,暂时就这些了,欢迎朋友们补充:)

 

这是在cppblog看到的另一遍文章:



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

另也有:

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

 

或者在call stack中右键设置调用断点位置,详见:如何:编辑断点位置
我经常在这上面看到美女的回答,很有用
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



猜您在找
vs2010单步调试崩溃 VS2010 + WIN7 单步调试 MySQL VS2010单步调试OCX控件 vs2008 单步调试问题 关于递归的单步调试问题
智能推荐
 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告