信號(hào)的處理
程序是和網(wǎng)絡(luò)相關(guān)的,調(diào)試期間經(jīng)常地收到SIGPIPE,導(dǎo)致gdb停下來。看了一下gdb info,解決方法很簡(jiǎn)單。用handle命令設(shè)置一下缺省signal的處理行為就可以了:
handle SIGPIPE nostop
如果連提示信息都不想看見,就可以這樣設(shè)置:
handle SIGPIPE nostop noprint
就可以了。其他相關(guān)信號(hào)也可以類似處理。想了解目前的signal狀態(tài)可以使用info signal察看。
啟動(dòng)配置文件
GDB使用中比較麻煩的事情,就是每次啟動(dòng),還要手動(dòng)敲一把命令,特別是斷點(diǎn)比較多的情況,這個(gè)特便影響,工作效率。查了一下gdb info,gdb支持自動(dòng)讀取一個(gè)啟動(dòng)腳本文件.gdbinit,所以經(jīng)常輸入的啟動(dòng)命令,就都可以寫在gdb啟動(dòng)目錄的.gdbinit里面。比如
.gdbinit:
file myapp
handle SIGPIPE nostop
break ss.c:100
break ss.c:200
run
GDB和bash類似,也支持source這個(gè)命令,執(zhí)行另外一個(gè)腳本文件。所以可以修改一下.gdbinit:
.gdbinit:
file myapp
handle SIGPIPE nostop
source gdb.break
run
gdb.break:
break ss.c:100
break ss.c:200
這樣修改的斷點(diǎn)配置,只需要編輯gdb.break就可以了。再后來,偶而還是需要單獨(dú)啟動(dòng)GDB,不想執(zhí)行自動(dòng)腳本,于是又改進(jìn)了一下。首先把.gdbinit命名為gdb.init,然后定義一個(gè)shell alias:
$ alias .gdb=”gdb -x gdb.init”
這樣如果需要使用自動(dòng)腳本,就用.gdb命令,否則用gdb進(jìn)入交互狀態(tài)的gdb。這樣配置以后可以一個(gè)簡(jiǎn)單命令就開始調(diào)試,整個(gè)效率就能提高不少。
注:轉(zhuǎn)自http://blog.scaner.i.thu.cn/index.php/2006/04/15/gdb-tips-1/
注解
1alias命令
alias顧名思義就是起別名的意思,在linux里,可以通過alias命令為常用命令設(shè)置快捷方式,命令格式如下: alias name='command' 例如:alias del='rm'
欲顯示系統(tǒng)已有別名,直接使用 alias或alias -p
若需要設(shè)置的命令別名比較多,可以直接修改/etc/bashrc或~/.bashrc,將需要的別名寫到里面即可,不同之處是/etc/bashrc設(shè)置的別名對(duì)于所有登錄用戶都起作用,而~/.bashrc只對(duì)目前用戶起作用。