啟動程式準備除錯
gdb your_proceduce
或者先輸入gdb,然後輸入 file your_proceduce
然後使用run或者r命令開始程式的執行,也可以使用 run parameter將引數傳遞給該程式
引數列表:
命令命令縮寫
命令說明
list
l顯示多行源**
break
b設定斷點,程式執行到斷點的位置會停下來
info
i描述程式的狀態
runr
開始執行程式
display
disp
跟蹤檢視某個變數,每次停下來都顯示它的值
step
s執行下一條語句,如果該語句為函式呼叫,則進入函式執行其中的第一條語句
next
n執行下一條語句,如果該語句為函式呼叫,不會進入函式內部執行(即不會一步步地除錯函式內部語句)
p列印內部變數值
continue
c繼續程式的執行,直到遇到下乙個斷點
set var name=v
設定變數的值
start
st開始執行程式,在main函式的第一條語句前面停下來
file
裝入需要除錯的程式
kill
k終止正在除錯的程式
watch
監視變數值的變化
backtrace
bt產看函式呼叫資訊(堆疊)
frame
f檢視棧幀
quit
q退出gdb環境
使用break進行打斷點 ,簡寫為b。
可以對某一行進行打斷點 例:對程式的第三行進行打斷點 b 3;如果是多個檔案,可以對某個檔案的某一行打斷點, 例:對gdb_test.c的第三行打斷點 b gdb_test.c:3。
可以對某個函式進行打斷點 例:對本程式中func()函式打斷點 b func;同理也可以對多個檔案中的某乙個檔案的函式打斷點,例: b gdb_test.c:func。
如果我們想刪除某個斷點,有種方法:
(1) delete 命令 簡寫d
delete break 刪除所有的斷點;
delete break n 刪除某個斷點 n為斷點號。
(2) clear 命令
clear 行號 刪除設在某一行的斷點;
這兩種刪除斷點的用法就在於乙個是依據斷點號刪除,乙個是依據行號刪除。
也可以通過如下方法禁用或開啟斷點:
disable break n 禁用某個斷點 n為斷點號;
enable break n 使能某個斷點 n為斷點號。
其中斷點號的查詢可以使用命令:
info b 檢視所有斷點資訊;
info b n 檢視第n個斷點的資訊。
若在除錯中需要檢視原始碼,可使用如下命令:
(1) list 命令或者簡寫l
(2)使用 layout src
第二種方式開啟原始碼視窗,使用更方便。layout src中可使用ctrl+l清空螢幕顯示。
layout:用於分割視窗,可以一邊檢視**,一邊測試。主要有以下幾種用法:
layout src:顯示源**視窗
layout asm:顯示彙編視窗
layout regs:顯示源**/彙編和暫存器視窗
layout split:顯示源**和彙編視窗
layout next:顯示下乙個layout
layout prev:顯示上乙個layout
ctrl + l:重新整理視窗
ctrl + x,再按1:單視窗模式,顯示乙個視窗
ctrl + x,再按2:雙視窗模式,顯示兩個視窗
ctrl + x,再按a:回到傳統模式,即退出layout,回到執行layout之前的除錯視窗。
單步除錯可以使用 n,
跳轉下一條語句用s,常用於進入某個函式體。
程式奔潰可以通過指令 bt 檢視堆疊資訊
檢視所有執行緒堆疊資訊
參考上述的引數列表。
選項作用
info threads
列出所有執行緒
thread n
切換到指定的執行緒,n是執行緒編號
set scheduler-locking on
只執行當前執行緒,鎖住其他執行緒
set scheduler-locking on step
單步執行當前執行緒時,鎖住其他執行緒
set scheduler-locking off
執行當前執行緒,同時執行其他執行緒
info threads
顯示可以除錯的所有執行緒。gdb會為每個執行緒分配乙個id(和tid不同),編號一般從1開始。後面的id是指這個id。
thread id
選項作用
backtrace
顯示棧的所有幀。bt等同於backtrace
frame n
設定幀n為當前幀 f n
up設定父幀為當前幀
down
設定子幀為當前幀
frame
顯示當前幀
info frame
顯示當前幀的區域性變數、形參等資訊
info args
顯示當前幀的引數
info locals
顯示當前幀的本地變數
info reg
顯示當前幀的暫存器
1.命令gdb your_proceduce 2570 可以附加到這個程序上。被時程序會中斷。(2570是程序id)
2.或者在gdb裡輸入attach 2570同樣可以附加到程序。
提示上述錯誤時,可以按照上圖設定,或者用root許可權啟動gdb。
Linux下C C 除錯工具GDB
例項除錯程式 main.c include int add range int low,int high int main void 以上函式add range功能為從low加到high,基本除錯步驟 1.編譯 gcc g main.c o main 2.除錯 gdb main 3.幫助 gdb h...
linux下的gdb除錯
如果編譯時,增加了引數 g,就會生成帶源 除錯符號的可執行檔案。增加的除錯符號一般會使檔案變的大一點。gcc o xx xx.c g 進一步地,就可以執行下面的指令啟動除錯工具進入除錯環境對程式進行除錯了。gdb xx 在除錯環境下,可以輸入下列指令來控制除錯。l n第乙個字母是小寫的l,列出第n行...
linux下安裝gdb除錯
1 arm linux gcc 每一種硬體都有其對應的最好的編譯工具,並不是最新的最好。其實思想很簡單,就是在宿主機 pc 上編譯目標板子上執行的程式。所以工具鏈要用目標板的,這樣去編譯生成可執行的二進位制檔案。這裡有乙個工具製作工具鏈,雖然它可以自動下,還是先下好吧自己,那個速度,呵呵。2 arm...