第一步:观察错误规律,根据规律找问题
比如查看每次错误时提示信息来定位错误在代码中的位置
第二步:根据现象顺藤摸瓜式的分析原因
如果错误呈现没有规律性的情况,只有根据错误现象查找产生问题的原因, 比如今天开发fileserver过程中遇到的情况。先把debug思路总结如下:
现象:单个线程没有问题,但当把线程数改为20的时候,有时候就会出现产文件过程所有进程都执行完打印文件大小后不动了
1、首先要想到client端阻塞住了,然后查看client端源代码中for语句中的部分,经打印trans_count的值,发现for语句正常
2、再设置断点debug发现ret = send(sServer, file_buff, nBytesRead, 0);这句后都执行不到,到此就可以判断线程阻塞到了此语句。
3、由于线程代码中只有send这个函数是阻塞函数,验证了问题就出在这里
4、由于send是阻塞函数,想到可能是服务器端没有接收,造成send阻塞
5、服务器端不接收,并且出错呈现随机性,因此很有可能是队列的问题
6、查看消息队列的代码,发现消息队列代码的逻辑错误,即多线程并发时,多个线程在阻塞等待noempty_event这个时事件,但有一个线程得到noempty_event,从队列中取socket并传送文件