万恶的VC单步调试

redui 2011-09-22 01:36:25
平台:WIN7-X64, VS2008

以前调试运行好好的,最近一段时间突然不能单步调试,过程和现象如下:

* 在无断点情况下,或者独立运行,程序运行完全正常,RELEASE版本也正常
* 所有断点都可以正常中断到
* 在中断后按 F5 可以正常继续运行,或者正常运行到下一个断点
* 在中断后按 F10/F11(单步/单步进入)马上跳出对话框,云“在 XXX 地址处非法访问”,之后无论按 F5/F10/F11 都弹出相同的对话框,无法继续执行。任何断点处单步都一样的结果
* 程序刚刚启动时的所有调试功能都正常,执行一个 ShowWindow 之后,再单步执行就弹框

按照上述现象初步分析,既然只是在 ShowWindow 之后才出现不能单步调试,说明是 ShowWindow 调用导致的一系列消息处理中存在问题,于是把断点设在窗口过程里,观察 ShowWindow 调用时接收的每个消息,依次单步执行,结果所有单步完全正常,ShowWindow 之后的单步也变得正常了。此为VC调试器的变态之一,居然不愿意让我单步查找单步问题。

既然怀疑窗口过程代码有问题,单步跟踪又不出现,就用测试工具吧。BOUNDSCHECKER可以派上用场了,启用BC后完全重新编译,用BC的错误检测模式启动应用,运行,完全正常,关闭应用后除了几个无关紧要的提示信息,BC没有发现任何资源泄漏、内存方面的问题。在BC的错误检测模式下用断点中断,跟前述现象一致,F5正常,F10/F11弹框,问题在于BC此时并未发现任何错误。看来大名鼎鼎的 BOUNDSCHECKER 也有不靠谱的时候啊。

关闭BC,回到正常模式。反复检测,现象依旧,ShowWindow 之前一切正常,之后F5正常,F10/F11弹框,害得我调试好麻烦,不得不设置N多断点,用F5方式模拟单步。后来突发奇想,我先启动应用程序,然后用VS调试器附加到应用程序,发现:一切OK,单步也正常了。虽然还是有点麻烦,但至少我能单步调试其它代码问题了。VC 确实很变态。

目前该问题还未解决,不知道有没有哪位同仁遇到过相似的问题没有,有没有什么解决方法。
...全文
292 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
W1nds 2011-09-28
  • 打赏
  • 举报
回复
确实麻烦额
涛声灿烂 2011-09-28
  • 打赏
  • 举报
回复
长见识啦。。。
百事烟 2011-09-28
  • 打赏
  • 举报
回复
我有一次任何程序,debug F5不能使用(响应速度超慢,稍大一点程序的会卡死),重装vc2005没解决
后来末办法重做的系统,xp vc2005

Athos_K 2011-09-28
  • 打赏
  • 举报
回复
每日报道
redui 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fatterbetter 的回复:]

release正常?
你单步调试的时候运行的是release版还是debug版?
能确定单步调试的时候运行的是debug版吗
我在调release版的时候遇到过和楼主类似的情况
[/Quote]

我很确定是DEBUG版本,因为中断后查看变量值都是正常的,RELEASE版本查看变量通常不准,因为内存布局被优化过。而且调试器通过附加进程方式能正常调试。
redui 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 visualeleven 的回复:]

多线程程序吗?会不会是无意之中使用了野指针?
[/Quote]

野指针逃不过 BC 的法眼,况且程序执行是正常的
supercllc 2011-09-28
  • 打赏
  • 举报
回复
release正常?
你单步调试的时候运行的是release版还是debug版?
能确定单步调试的时候运行的是debug版吗
我在调release版的时候遇到过和楼主类似的情况
Eleven 2011-09-22
  • 打赏
  • 举报
回复
多线程程序吗?会不会是无意之中使用了野指针?
redui 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzz3265 的回复:]

BOUNDSCHECKER 容易导致问题, 卸掉再试试
[/Quote]

安装BC之前就已经出现这个问题了,后来才装上BC来测试的,估计卸载也解决不了问题
Yofoo 2011-09-22
  • 打赏
  • 举报
回复
BOUNDSCHECKER 容易导致问题, 卸掉再试试
redui 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jennyvenus 的回复:]

BOUNDSCHECKER就是一个语法检查工具,没那么高的实用价值,整天检查什么变量使用之前没赋值之类的操作。

你的showwindow是怎么个写法,既然他有问题,你应该贴出来。
[/Quote]

应该说可以肯定不是 ShowWindow 自身的问题,毕竟这个系统API经历过千锤百炼,有问题都应该往自己身上想,ShowWindow 会产生很多消息,这些消息处理都是自己的代码,所以首先怀疑的应该是消息处理代码。
  • 打赏
  • 举报
回复
没遇到过。。
nnull 2011-09-22
  • 打赏
  • 举报
回复
我完全没看懂楼猪要描述的是什么问题~~~ 吼吼~~~
oldmtn 2011-09-22
  • 打赏
  • 举报
回复
配置环境有可能有问题。。。。
ljn398431 2011-09-22
  • 打赏
  • 举报
回复
接个分
superarhow 2011-09-22
  • 打赏
  • 举报
回复
是不是中毒了,灰鸽子什么的
用户 昵称 2011-09-22
  • 打赏
  • 举报
回复
BOUNDSCHECKER就是一个语法检查工具,没那么高的实用价值,整天检查什么变量使用之前没赋值之类的操作。

你的showwindow是怎么个写法,既然他有问题,你应该贴出来。
ouyh12345 2011-09-22
  • 打赏
  • 举报
回复
没有用过64位平台
没有遇到过楼主的情况,试试windbg
用户 昵称 2011-09-22
  • 打赏
  • 举报
回复
有点意思
redui 2011-09-22
  • 打赏
  • 举报
回复
占沙发

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧