如果您在Window XP下使用VC6.0调试一个MFC多线程程序,可能会出现死机问题。
问题描述:一旦在主线程和工作线程中同时设断点调试就会出现类似死机的症状,什么都动不了,但是一按关机键,所有程序又都能正常退出并正常关机。在win7下就一点毛病都没有。
网上解决方法也不少,原理都是一样的,让工作线程在断点前阻塞一段时间。
笔者在网上找到的解决方案是这样的:
1) 工作线程中不要设置任何一个断点。在想设置断点的地方的前几句加一个AfxMessageBox之类的。如下图所示:
2) 正常调试程序,但创建工作线程时一定要按F5,运行到你加的AfxMessageBox弹出来。不要关!如下图所示:
3) 不要关AfxMessageBox!在想设置断点的地方加断点。4) 关掉AfxMessageBox,程序就在断点处停下了。
不过在笔者折腾的时候发现,有了AfxMessageBox之后,调试之前设断点也是可以的。后来看到有人说在线程入口加一个Sleep(10)或稍微长一点的时间也行。细一想原理一样,就没测试(其实是没有测试环境了)。至于为什么,由于笔者对VC6.0调试的实现实在没有什么了解,真的说不上来。不过猜应该是死锁了。