Posted on 2011-06-10 13:43
S.l.e!ep.¢% 閱讀(991)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
Unix
Posted on 2011-06-09 16:28
whspecial 閱讀(6)
評(píng)論(0) ?
編輯?
收藏引用 所屬分類(lèi):
工具使用
?????僅僅是介紹一些使用心得,并非manual,欲知詳情請(qǐng)google。。。
???? ---------------------------------------------------------------------------------------------------------------------------
?????在實(shí)驗(yàn)室里混了這么久,驀然回首,發(fā)現(xiàn)其實(shí)自己主要做的工作就是debug和fix bug。。。現(xiàn)在將自己debug時(shí)用到的一些工具分享出來(lái),share給有需要的朋友,大牛看了請(qǐng)一笑了之。
????
(1)GDB:最正宗最傳統(tǒng)的debug工具,如果做kernel的開(kāi)發(fā),還有KDB可以使用。
???? 小tips:
???? <1>可以attach到某一個(gè)進(jìn)程進(jìn)行調(diào)試,注意如果進(jìn)程里有fork和exec調(diào)用來(lái)切換到其它進(jìn)程的話,需要特殊處理
???? <2>多線程也可以用gdb來(lái)調(diào)試,但是我用了之后感覺(jué)并不是很好。。。
???? <3>如果遇到段錯(cuò)誤或者程序crush這樣的錯(cuò)誤,可以使用gdb來(lái)調(diào)試core dump文件,但是生成core dump需要先進(jìn)行設(shè)置(具體請(qǐng)google~)
???? <4>注意內(nèi)聯(lián)函數(shù)是不能被gdb跟蹤的
?????<5>gdb很強(qiáng)大,請(qǐng)耐心點(diǎn)看manual。。。
?????鏈接:
http://www.gnu.org/software/gdb/documentation/
????
(2)wireshark:雖然不是調(diào)試工具,但如果是做網(wǎng)絡(luò)程序的開(kāi)發(fā),非常有用。
?????小tips:
???? <1>如果程序里的通信協(xié)議是使用字符串編碼,非常好,但是如果使用二進(jìn)制編碼,wireshark不好用
???? <2>對(duì)于tcp流,可以在某一個(gè)包點(diǎn)擊右鍵:"follow tcp stream",可以看到該tcp流的全部信息
???? <3>如果僅僅想看截取包的開(kāi)頭處的信息,可以將包截短,在"capture options"里的"limit each packet to"設(shè)置?
???? <4>windows和linux下都有wireshark。。。
???? 鏈接:
http://www.wireshark.org/docs/wsug_html_chunked/
????
(3)strace:截獲system call,如果能夠看到某個(gè)system call的返回值錯(cuò)誤,可以很輕松地找到bug原因。
?????小tips:??????
???? <1>strace也可以像gdb一樣去attach一個(gè)正在運(yùn)行的進(jìn)程,使用-p pid(進(jìn)程號(hào))即可
???? <2>strace的輸出比較多,可以-o?輸出到文件里,分析的時(shí)候請(qǐng)耐心。。。
???? 鏈接:
http://people.gnome.org/~newren/tutorials/developing-with-gnome/html/ch03s02.html
?????
(4)inotify-tools:截獲文件系統(tǒng)觸發(fā)的事件,這個(gè)是基于inotify框架來(lái)寫(xiě)的一個(gè)工具,但是感覺(jué)和strace相反,它給出的信息過(guò)于少。
?????鏈接:
https://github.com/rvoicilas/inotify-tools/wiki/
????
(5)printf大法:最原始的未必就不好,有時(shí)也很有用。
?????除了傳統(tǒng)的printf,還有一些類(lèi)似的東西
?????perror:打印程序errorno
http://pubs.opengroup.org/onlinepubs/009695399/functions/perror.html
?????查看log信息:如果你是去修改別人的開(kāi)源程序(經(jīng)常有實(shí)驗(yàn)室這樣干吧),那么它的log信息就很重要,記得按照你的需求去設(shè)置log level
?????printk:kernel開(kāi)發(fā)中的printf
???? ----------------------------------------------------------------------------------------------------------------------------
?????即使把太平洋里水全部倒出來(lái),也澆不息我debug的熱情!但是我能把太平洋的水全倒出來(lái)嗎?不能,所以我對(duì)debug沒(méi)有熱情。