※程序
(1)預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb支援多程序的分別以及同時除錯,也就是說,gdb可以同時除錯多個程式。只需要設定follow-fork-mode和detach-on-fork即可。
*設定方法:a)啟動gdb;b)set follow-fork-mode [parent|child] set detach-on-fork [on|off];c)啟動程式檔案;d)break fork 在fork函式處下斷點。
(2)attach子程序的方法:用attach 命令attach到子程序然後除錯。步驟是:a)首先在需要除錯的子程序的初始**中加入一段特殊的**,然後執行除錯程式;b)用ps -ef | grep 檢視產生的子程序的pid;c)啟動gdb,attach到程序之後就可以除錯了。
./test & 在後台執行程式
執行gdb
(gdb)attach
(gdb)stop 暫停子程序
*下斷點後就可以開始除錯了
※執行緒*在多執行緒程式設計時,當我們需要除錯時,有時需要控制某些執行緒停在斷點,有些執行緒繼續執行。有時需要控制線程的執行順序。有時需要中斷某個執行緒,切換到其他執行緒。這些都可以通過gdb實現。
(gdb)l 1 顯示**
(gdb)r 5 r 16在第五行、第十六行下斷點
(gdb)r 開始執行
(gdb)thread 3 切換到執行緒3
※gdb除錯指令
*list linenum 顯示程式第linenum行周圍的程式
*list function 顯示函式名為function的函式的源程式
*step count 一次性執行count步,如果有函式會進入函式
*next count 一次執行count步,有函式也不會進人
*finish 執行程式,直到當前函式完成返回,並列印函式返回時的堆疊位址和返回值以及引數資訊
*until 退出迴圈體
*watch expr 為表示式expr設定乙個觀察點,一旦表示式值有變化,馬上停住程式
*rwatch expr 當表示式expr被讀時,停住程式
*awatch expr 當表示式的值被讀或被寫時,停住程式
*info watchpoints 列出所有觀察點
多執行緒除錯:
*info threads 顯示所有執行緒
*thread id 切換到指定執行緒
*break filename:linenum thread all 在所有執行緒相應行設定斷點,注意如果主線程不會執行到該行,並且啟動all-stop模式,主線程執行n或s會切換過去
*set scheduler-locking off|on\step 預設off,執行s或c其它執行緒也同步執行。on,只有當前相稱執行。step,只有當前執行緒執行
*show scheduler-locking 顯示當前模式
gdb除錯多程序和多執行緒
在linux中,gdb 沒有對多程序程式除錯提供直接支援,例如,使用gdb除錯某個程序,如果該程序fork了子程序,gdb會繼續除錯該程序,子程序會不受干擾地執行下去。如果你事先在子程序 裡設定了斷點,子程序會收到sigtrap訊號並終止。但是gdb v7.0 支援多程序的分別以及同時除錯,換句話說...
gdb除錯多程序多執行緒
1.除錯多程序預設設定下,在除錯多程序程式時gdb只會除錯主程序。但是gdb v7.0 支援多程序的 分別以及同時 除錯,換句話說,gdb可以同時除錯多個程式。只需要設定follow fork mode 預設值 parent 和detach on fork 預設值 on 即可。接下來,首先介紹一下f...
gdb除錯多程序多執行緒
gdb是非常強大的unix及unix like下的程式除錯工具 gdb的使用 r或run 執行程式。list l 行號 顯示檔案源 接著上次的位置往下列,每次列10行。list l 函式名 列出某個函式的源 s或step 進入函式呼叫 breaktrace 或bt 檢視各級函式調 用及引數 info...