多线程编程时,各个线程之间共享数据、锁造成的bug不计其数,调试难度也油然而生,最近有感于一次bug调试,总结了之。
1. 找到问题所在
多线程最多的问题是内存访问的问题,找到发生冲突的内存访问代码块,增加日志的输出。在各线程存取时,输出日志,发现问题。
一般情况下,问题都是由于锁或者条件变量的不正确使用,或者错误的判断条件造成。先找准问题。
2. 采用断点进行调试
如果分析日志不容易解决问题,就增加断点信息进行调试。从哪里跌倒,就从哪里断点。在各个线程的访问关键代码点打断点。
程序暂停下来之后,仔细分析判断条件是否有误,这时就可以通过各种调试手段来进行分析了。如果发再判断条件不对,就再仔细分析是哪个地方代码有误。一步步缩小范围。
给一个例子,大家来说说这个程序的问题:
目标是开10个线程,等线程全部结束了,主程序再退出。
#include <pthread.h>
#include &l