万恶的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 确实很变态。
目前该问题还未解决,不知道有没有哪位同仁遇到过相似的问题没有,有没有什么解决方法。