gdb除錯多程序和多執行緒

2021-08-02 01:13:25 字數 2168 閱讀 3831

※程序

(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...