多线程调试
我一般的调试方法:
一、首先,先把线程函数作为一个独立函数来调试,单步调试完后,再改为线程。这样,会降低调试难度。
二、如果两三个线程需要同步操作,那么先单独用方法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.内存标记,可以降低干扰,可以快速标识问题线程,找到问题所在
作者:kissazi2
出处:http://www.cnblogs.com/kissazi2/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。