多线程调试

 

我一般的调试方法:
一、首先,先把线程函数作为一个独立函数来调试,单步调试完后,再改为线程。这样,会降低调试难度。
二、如果两三个线程需要同步操作,那么先单独用方法1调试完毕,然后再组合。尽可能地将情况简单化,没问题了再增加复杂度。
三、在多个线程运行起来的时候,在关键位置设置断点,断点位置不能太多,用F5别用f10单步运行。跟踪断点位置变量的结果,判断问题所在。

 

========================================================

一是有计划地对付错误。

对应用程序展开适当的调试,应该是远在你使用调试器之前就开始了。多多使用ASSERT调试措施。(ASSERT背后的概念是安全和速度之间的交换。程序运行因此运行得比较慢,但是Debug Build的制造就是为了调试,所以可以理解)在每一个你的假设之处做检验工作。进入一个函数时,确认所有状态。不要只是检查指针是否合法;如果可能,检查一下指针所指的结构中的数据是否一致。

二是Bench Testing

其实这种方法就是先撇开多线程的环境,测试程序逻辑的正确性。如果OK了,然后再考虑与线程相关的东西。

三是线程对话框

这里主要讨论了对一个特定的线程如何调试,方法是挂起所有的线程——除了我们关注的那个。书中介绍的方法在vs 2005我没有找到。

四是日志记录

这里主要是在控制台窗口显示一些运行信息,我们可以使用printf等函数在控制台输出一些信息来查看线程的运行次序。

五是内存记号

使用内存记号的好处就是降低彼此干扰的可能性。但是也要注意它不是同步操作,可能会因为两个线程的同时写入引来问题。

六是硬件调试寄存器

另外推荐你一篇文章:调试多线程应用程序

 

==========================================================

1.尽量多用工具分析,比如Thread Checker,Thread Profiler,能以较直观的方式发现问题。

2.Bench Testing,先把多线程环境屏蔽掉,先验证逻辑部分有没有问题,如果OK了,再考虑增加多线程相关功能

3.多用assert、条件断点等捕捉错误信息

4.日志记录,打印运行信息和线程的运行次序。

5.内存标记,可以降低干扰,可以快速标识问题线程,找到问题所在

posted @ 2013-04-22 09:46  陈哈哈  阅读(702)  评论(0编辑  收藏  举报