一、常規除錯
gdb是linux下常用的程式除錯工具,當然前提是用gcc/g++編譯時加上-g引數,這樣編譯出的可執行程式會加上gdb除錯資訊。
gdb命令不少,但常用的主要包括如下命令:
(1)list [file:]functuon
命令縮寫是l,檢視原始碼,不加引數時,向下顯示原始碼,加引數-l時,向上顯示原始碼,預設顯示10行。
也可以設定在某個函式出列出原始碼,需要注意的是:如果是非成員函式則用file:function即可,如果是類成員函式則用class::functuon。
(2)edit [file:]function
命令縮寫是e,編輯當前所在的行,也可以編輯某個函式的原始碼(規則同list)。
(3)break [file:]function
命令縮寫是b,設定斷點,可以設定在某行或某個函式處(規則同list),此外還可以直接用檔名:行號來設定斷點。
(4)info
命令縮寫是i,列表gdb子命令的資訊,如:info break, info variables, info stack等。
(5)run [arglist]
命令縮寫是r,執行程式至斷點處停住,run命令之後可以加上除錯程式需要的引數。
(6)next
命令縮寫是n,單步調試執行語句,如果遇到函式也當一條單步語句而不進入函式,類似於vc中的f10。
(7)step
命令縮寫是s,單步調試執行語句,如果遇到函式會直接進入函式內部,類似於vc中的f11。
(8)continue
名利縮寫是c,繼續執行程式至下乙個斷點。
(9)what
檢視變數型別。
(10)print
命令縮寫是p,列印變數的值。
(11)backtrace
命令縮寫是bt,檢視堆疊資訊。
(12)enter
回車鍵,重複執行上一條除錯命令。
(13)help [name]
顯示指定的gdb命令的幫助資訊。
(14)quit
命令縮寫是q,退出gdb。
gdb除錯執行程式時,用gdb .exe引導程式,gdb除錯core dump時,用gdb .exe .core引導程式,執行r命令可以開始執行程式。在gdb內編輯完**後,不需要退出gdb,而直接在gdb裡make即可,否則之前設定的斷點等資訊都付之一炬了。
二、多執行緒除錯
(1)info threads
命令縮寫是info thr, 顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用這個id,前面有*的是當前除錯的執行緒。
(2)thread id
命令縮寫是thr,切換當前除錯的執行緒為指定id的執行緒。
命令縮寫規則同上,讓乙個或者多個執行緒執行gdb命令command。
命令縮寫規則同上,讓所有被除錯執行緒執行gdb命令command。
(5)set scheduler-locking off|on|step
在除錯多執行緒程式時,使用step或者continue命令除錯當前執行緒時,其它執行緒也在併發執行,這個命令可以通過off|on|step來控制線程的執行,即:
off:不鎖定任何執行緒,即所有執行緒都執行,這是預設值。
on:只有當前被除錯程式會被執行。
step:在單步的時候,除了next過乙個函式的情況以外,只有當前執行緒會執行。
Linux的GDB除錯技術
hchen test 補充gdb除錯中動態顯示執行的 在gdb除錯中,大家都知道使用list命令來顯示 例如 顯示main.c中的main函式附近的 list main.c main 顯示main函式附近的 list main 顯示main.c中的第2到20行的 list main.c 2,20 顯...
Linux技術 gdb除錯基礎
gdb即gnu debugger。gcc編譯選項 g,這樣生成的目標 中就新增了除錯資訊。gcc g o hello hello.c gdb完成的大部分工作都可以用很少的命令集合完成。啟動gdb gdb 程式名 corefile corefile是可選的,但能增強gdb的除錯能力。linux預設是不...
GDB除錯技術
gnu的偵錯程式稱為gdb,該程式是乙個互動式工具,工作在字元模式。在 x window 系統中,有乙個gdb的前端圖形工具,稱為xxgdb。gdb 是功能強大的除錯程式,可完成如下的除錯任務 設定斷點 監視程式變數的值 程式的單步執行 修改變數的值。在可以使用 gdb 除錯程式之前,必須使用 g ...