今天看的调试的这一章主要是针对多线程程序的调试。多线程程序运行的不确定性,使其调试起来就像抓蝴蝶一样,你捉摸不透它驻足的位置。
书中给了一些建议和方法:
一是有计划地对付错误。
对应用程序展开适当的调试,应该是远在你使用调试器之前就开始了。多多使用ASSERT调试措施。(ASSERT背后的概念是安全和速度之间的交换。程序运行因此运行得比较慢,但是Debug Build的制造就是为了调试,所以可以理解)在每一个你的假设之处做检验工作。进入一个函数时,确认所有状态。不要只是检查指针是否合法;如果可能,检查一下指针所指的结构中的数据是否一致。
二是Bench Testing
其实这种方法就是先撇开多线程的环境,测试程序逻辑的正确性。如果OK了,然后再考虑与线程相关的东西。
三是线程对话框
这里主要讨论了对一个特定的线程如何调试,方法是挂起所有的线程——除了我们关注的那个。书中介绍的方法在vs 2005我没有找到。
四是日志记录
这里主要是在控制台窗口显示一些运行信息,我们可以使用printf等函数在控制台输出一些信息来查看线程的运行次序。
五是内存记号
使用内存记号的好处就是降低彼此干扰的可能性。但是也要注意它不是同步操作,可能会因为两个线程的同时写入引来问题。
六是硬件调试寄存器
前面的这六种方法我也只用过三种,有一些还真是第一次见到。不过不怕下次搞不定问题的时候可以拿来进行尝试,来抓一抓隐藏在程序中的“臭虫们”。
成功消除多线程程序的“臭虫”,作者说需要具备三种素养:决心、耐心、创造力。同时也不要蛮干,要采用科学的方法:观察、预测、测试。
总结一下:借助方法,观察现象,大胆预测,勇敢尝试,完备测试。
项目中也碰到了多线程的使用。未来可能多线程的使用会越来越多,不能停留在完成功能和任务上,应该多思考多测试。避免多线程的不可确定性带来的一些困扰。
学习书籍:《Win32 多线程程序设计》侯捷译
posted on 2009-08-21 17:19
Sandy 阅读(1783)
评论(2) 编辑 收藏 引用 所属分类:
windows学习