Debug方法总结

第一步:观察错误规律,根据规律找问题

比如查看每次错误时提示信息来定位错误在代码中的位置

第二步:根据现象顺藤摸瓜式的分析原因

如果错误呈现没有规律性的情况,只有根据错误现象查找产生问题的原因, 比如今天开发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并传送文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值