1、对一条特定的线程进行调试
Visual C++调试器支持多线的情况,如果你在许多线程都调用的函数中
设置一个断点,每当一个线程遭遇到此断点,调试器就会在线程之间循环切换
有个方法可以避开这个问题,就是挂起所有线程,除了你感兴趣的那条(要调试
的那条),在调试器中打开[Debug]菜单并选择[Thread]你就可以获得一个线程对
话框,在这里你可以挂起所有的线程,把你要调试的线程留下来,单独调试他
2、运转记录
就是让程序的关键部分显示出其发生的活动的一种方法!
就是在程序的关键部位(某一时刻你想知道他的状态)加上一些输出语句,比如
printf TRACE 等等,可以将信息输出到屏幕,也可以重定向到文件中,不要
用一些控件比如ListBox,因为ListBox也是一个窗口,在他的内部有自己的消息
循环,向ListBox中输出调试信息的时候,会引起不必要的线程切换(从当前
线程切换到ListBox的消息循环)非常耗时!这对多线程这种对时间很敏感的程序
来说有可能会影响运行的结果!
在GUI程序中也是可以拥有console窗口的,由于console窗口由系统的设备驱动
程序负责,即使你的程序当掉或在调试器中停止console窗口仍有反应!
3、内存记号(Memory Trails)
上面的两种方法执行的时间都稍长,有可能影响到程序运行的结果,Memory Trail
属于一种比较低阶的技术!
是用Memory Trail的方法:
你必须产生一个足够大的全局缓冲区,以及指向该缓冲区的全局指针,例如:
char gMemTrail[16384];
char *pMemTrail = gMemTrail;
当你想输出某些东西到屏幕上或文件中时,你就写个记号到MemTrail中
例如:
*pMemTrail++ = 'f';
你的程序的每一个追踪点都应该写一个不同的记号,不论什么时候你想要,或是
程序当掉之后,你可以利用调试器看看 memory trail中的内容!
3、硬件调试寄存器
只适用于Intel机器!
这个俺就不多说了,基本上很少用!
vc调试多线程程序的方法
最新推荐文章于 2021-05-18 04:28:38 发布