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