在linux 中使用GDB除錯程式

2021-09-05 08:39:37 字數 2338 閱讀 6186

1  簡介

越來越多公司開始使用linux系統作為底層系統,如何進行**的除錯,定位問題成為了乙個棘手的問題。而gdb作為該類產品的除錯工具,掌握gdb除錯成為乙個程式設計師必要的技術。

2 gdb 除錯命令

2.1 檢視和設定狀態

info args

顯示gdb除錯的程式的狀態資訊,引數args 用於指定檢視的具體狀態名。

set  arg s

設定gdb除錯程式和gdb的狀態,引數args 用於指定檢視的具體狀態名。

show  args

顯示gdb自己的狀態的資訊,引數 args 指定檢視的具體的狀態名。

2.2 取得命令的幫助

help   顯示gdb的命令的列表。

help  class 顯示指令分類class下的所有命令。

help command 顯示指定命令的幫助命令。

info 顯示可以用info命令檢視的狀態。

show 顯示可以用show,命令檢視的狀態。

2.3 中斷程式的執行  ctrl+c ,程式被中斷後停在隨機乙個指令上。

2.4 斷點 

2.4.1設定斷點 

斷點用break 來設定,通常用sbpnum 來記錄最近設定的斷點數。

break(b) function 

break(b) +offset

break(b) - offset

break(b) linenum

break(b) filename:linenum

break(b) filename:function

break(b) *address

break  在選定的堆疊要執行的下一條指令設定乙個斷點。

break .....if cond  設定乙個有條件的斷點,只有滿足條件才停止。

info break   檢視設定的斷點資訊。

2.4 .2刪除斷點

clear  刪除選定的堆疊要執行的下一條指令處設定的斷點。

clear function 

clear filename: function刪除函式入口的斷點。

clear llinenum\

clear filename : linenum  刪除指定**行的斷點。

delete bnums 刪除引數指定數目的斷點或檢查點。

2.4.3禁用斷點

disable bnums

enable bnums

2.4.5 中斷條件

condition bnum expression  指定expression  作為第bnums個斷點或檢查點的中斷條件。

condition bnum 移去第bnum個斷點或檢查點的中斷條件,使其變成無條件斷點。

ignore bnum count 忽略 count   次第bnums個斷點。

2.4.6 繼續與單步執行

c /step/n 

finish  繼續執行到函式返回,並列印函式的返回值。

until(u)可避免step 在迴圈內的單步執行,一下就到達迴圈的終點。

3 檢視堆疊

每次程式執行函式呼叫時,都會生成相應的資訊,包括呼叫在程式中的位置,呼叫引數以及被呼叫函式的區域性變數。這些資訊儲存在一塊叫堆疊框的資料裡。堆疊框分配的記憶體區域叫呼叫堆疊。

frame args 用來從乙個命令移動到另乙個命令堆疊框,並列印所選擇的堆疊框。args 可以是堆疊框的位址,也可以是堆疊號。

3.1 檢視原始檔

list linenum 列印當前原始檔以linenum為中心的原始碼。

list function 列印以函式function開頭的為中心的原始碼

list first,last 列印從first到last的原始碼。

3.2 搜尋原始檔

forward-search regexp 

search regexp 

reverse-search regexp    在當前原始檔裡向前(後)與「regexp」匹配的規則表示式。

3.3  檢視資料和記憶體

3.3.1 檢視資料

print exp 

print /f 

列印格式可以以下幾種:

x 用十六進製制形式列印資料。

d 用帶符號的十進位制形式列印資料。

u 用無符號的十進位制列印資料。

o 用八進位制形式列印資料。

t 用二進位制列印資料。

a 把值列印成位址。

c 用字元常量的形式列印整數。

f  列印浮點數值。

3.3 修改資料和記憶體

set *(long  *)address =val;

set variable=val

未完待續,請看下集

gdb 中使用 core 除錯段錯誤

如果我們執行生成檔案a.out a.out 時出現段錯誤,我們可以使用產生的 core 檔案來快速定位錯誤產生的地方 哪個檔案中的哪行?如果執行 a.out 時沒有產生名叫 core 的檔案,可能是因為系統限制了產生的 core 檔案大小。使用 ulimit c 檢視 core 檔案大小的限制值,它...

gdb除錯使用

功夫再牛也怕菜刀,程式設計師不可能不犯錯誤,在linux下面除錯我們使用gdb,這次就講他的使用,它可以除錯c和c gdb提供的功能有 1.監視程式中的變數的值 2。設定斷點停止 執行 3,一行行的執行 使用方式很簡單,在命令列鍵入gdb就能用了,正常啟動就會有如下類似的內容,在這裡可以鍵入命令來指...

linux下gdb的除錯使用

1.gdb除錯的物件是可執行檔案,而不是程式的源 因此在使用gcc編譯器時 需加 g選項。告訴gcc編譯器加入除錯資訊。例如 gcc g test.c o test 2.除錯gdb的格式是 例如 gdb test 3.在啟動gdb後,會顯示一段版權說明,如果要不顯示 加入 q即可 例如 gdb q ...