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