Linux下C C 語言gdb除錯方法

2021-09-25 10:27:43 字數 2944 閱讀 1537

啟動程式準備除錯

gdb your_proceduce

或者先輸入gdb,然後輸入 file your_proceduce

然後使用run或者r命令開始程式的執行,也可以使用 run parameter將引數傳遞給該程式

引數列表:

命令命令縮寫

命令說明

list

l顯示多行源**

break

b設定斷點,程式執行到斷點的位置會停下來

info

i描述程式的狀態

runr

開始執行程式

display

disp

跟蹤檢視某個變數,每次停下來都顯示它的值

step

s執行下一條語句,如果該語句為函式呼叫,則進入函式執行其中的第一條語句

next

n執行下一條語句,如果該語句為函式呼叫,不會進入函式內部執行(即不會一步步地除錯函式內部語句)

print

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