最近在工作中發(fā)現(xiàn)網(wǎng)絡(luò)通信收發(fā)文件部分,發(fā)送一次文件后,就再也不能發(fā)第二次了。本以為是協(xié)議的問題,后來用TOP發(fā)現(xiàn)CPU過高,才通過GDB看到了是一個(gè)清空Buffer類的代碼有BUG,計(jì)算無符號(hào)整形的操作溢出了。
具體跟蹤方法記錄一下。首先正常啟動(dòng)程序,然后進(jìn)行收發(fā)文件操作,觸發(fā)死循環(huán)。而后通過 top -H 查看哪個(gè)線程(其實(shí)是PID,redhat的線程是fork進(jìn)程實(shí)現(xiàn)的)占用CPU過高,而后gdb -p [pid] attach 之,最后bt 打印堆棧。