gdb偵錯程式的使用,初探全貌

2021-10-03 23:48:38 字數 2061 閱讀 7395

gdb 介紹:

gdb互動命令:

更強大的工具 cgdb:

常用自我檢測:

簡 述:在 mac 下安裝和呼叫 gdb 除錯程式。和 gdb 一些常用的使用引數含義。

?:macos 10.14.6?gcc/g++ 9.2.0?gdb8.3

在 linux 下面安裝gdb 真的 so 容易; 但是在 mac 上面,尤其是高版本的,安裝過程中就會遇到各種坑,親自把所有的坑都踩了一遍,安裝教程如文:

在macos10.14.6安裝最新gdb8.3的詳細教程,含可能遇到的所有坑(網上最新教程)

編譯程式:

執行除錯:

gdb 是乙個由 gnu 開源組織發布的、unix / linux 作業系統下的、基於命令列的、功能強大的程式除錯工具。

啟動gdb後,進入到互動模式,通過以下命令完成對程式的除錯;注意高頻使用的命令一般都會有縮寫,熟練使用這些縮寫命令能提高除錯的效率;

執行:next:(簡寫 n),單步跟蹤程式,當遇到函式呼叫時,也不進入此函式體;此命令同 step 的主要區別是,step 遇到使用者自定義的函式,將步進到函式中去執行,而 next 則直接呼叫函式,不會進入到函式體內。

step(簡寫s):單步除錯如果有函式呼叫,則進入函式;與命令n不同,n是不進入呼叫的函式的

until:當你厭倦了在乙個迴圈體內單步跟蹤時,這個命令可以執行程式直到退出迴圈體。

until + 行號: 執行至某行,不僅僅用來跳出迴圈

call 函式(引數):呼叫程式中可見的函式,並傳遞「引數」,如:call gdb_test(55)

quit:簡記為 q ,退出gdb

設定斷點:

檢視源**:

列印表示式:

查詢執行資訊:

分割視窗:

註解:

互動模式下直接回車的作用是重複上一指令,對於單步除錯非常方便;

cgdb可以看作 gdb 的介面增強版,用來替代 gdb 的 gdb -tui。cgdb 主要功能是在除錯時進行**的同步顯示,這無疑增加了除錯的方便性,提高了除錯效率。介面類似 vi,符合 unix / linux 下開發人員習慣; 如果熟悉 gdb 和 vi,幾乎可以立即使用 cgdb。

gdb 除錯利器

//測試回憶 2020-03-15:

brew和brew cask有什麼區別?

g++ -g

lshow ?size

set ?size 20 設定一次顯示多少行**

b 斷點

i b (info) 檢視斷點資訊

d 2 3 (d 4-11) 刪除斷點

dis/ena 4 設定/取消 無效斷點

b 17 if i == 3 設定條件斷點

ptype b 檢視變數型別

p a 檢視變數的值(print)

n 執行下一行(next) 後面一直按回車

display a 每走一行**,都顯示出變數 a 的值

i display 檢視所有的顯示變數

undisplay 1 不再顯示變數的值(先執行 i display)

c 一次執行多行 (continue)

s 進入到函式體 (step)

start 停在 main(

){ 的地方

r 停在了第乙個斷點 (run)

set val i = 5 設定迴圈變數的值

until 跳出 for 迴圈 (此for 裡面沒有斷點)

finsish 跳出函式體內部 (裡面也沒有斷點)

linuxexampl

gdb 偵錯程式的使用

gdb 偵錯程式的使用 在用gcc編譯程式時,加上 g 引數,然後執行 gdb 可執行程式名 就進入gdb除錯模式 常用指令 1.l list 列出程式清單 2.r run 執行程式 3.b breakpoint 設定斷點,格式 b 行號 函式名 4.b num if i 20 設定斷點的觸發條件 ...

GDB偵錯程式

偵錯程式gdb 一 啟動和退出gdb gdb除錯的物件是可執行檔案,而不是程式的源 如果要使乙個可執行檔案可以被gdb除錯,那麼在使用編譯器gcc編譯程式時需要加入 g選項。gdb除錯乙個程式的命令格式是 gdb 程式檔名 也可以在linux提示符下,直接輸入gdb,然後使用file命令裝入要除錯的...

gdb偵錯程式

在使用gdb偵錯程式之前,必須在編譯程式時加上 g選項 功能 顯示上次內容之前或之後的10行內容,首次使用顯示main 函式之前或之後的10行內容 命令 list 簡稱 l 功能 顯示引數行之前和之後的10行內容.命令 list line number 簡稱 l 10 功能 顯示原始檔從一行到另一行...