gdb學習筆記

2021-09-26 18:17:50 字數 1721 閱讀 1594

gdb是乙個開源的debug工具,適用於c語言、c++等。

2.1 啟動gdb

對c/c++程式的除錯,需要在編譯前加上-g選項:

假設現有名為hello.cpp的原始檔,編譯時執行

g++  hello.cpp -o hello -g
注:編譯後的檔名要和源檔名相同,這樣gdb可以找到它。

除錯可執行檔案

g++ hello
執行此命令後,進入gdb互動式命令模式。

2.2 進入gdb互動式命令

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

執行時或單步或跳轉

run (簡寫r):執行程式。

continue (簡寫c ):繼續執行,到下乙個斷點處(或執行結束)

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

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

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

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

finish: 執行程式,直到當前函式完成返回,並列印函式返回時的堆疊位址和返回值及引數值等資訊。

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

quit:簡記為 q ,退出gdb

斷點相關
break n (簡寫b n):在第n行處設定斷點

b fn1 if a>b:條件斷點設定

condition 斷點號n 條件:條件斷點設定,如 condition 1 item_to_remove==1

break func:在函式func()的入口處設定斷點,如:break swap

delete 斷點號n:刪除第n個斷點

disable 斷點號n:暫停第n個斷點

enable 斷點號n:開啟第n個斷點

clear 行號n:清除第n行的斷點

info b :顯示當前程式的斷點設定情況

delete breakpoints:清除所有斷點

檢視**內容
list (簡記為 l) :顯示程式的源**,預設每次顯示10行。

list 行號:將顯示當前檔案以「行號」為中心的前後10行**,如:list 12

list 函式名:將顯示「函式名」所在函式的源**,如:list main l

list :不帶引數,將接著上一次 list 命令的,輸出下邊的內容。

檢視函式呼叫資訊
backtrace (簡寫bt):顯示所有的呼叫棧資訊。

set args:指定執行時的引數

show args:檢視設定好的引數

info program: 來檢視程式的是否在執行,程序號,被暫停的原因。

分割視窗
layout:用於分割視窗,可以一邊檢視**,一邊測試

ctrl + l:重新整理視窗

gdb學習筆記

gdb 是乙個工具,他是除錯工具,能夠用於程式的除錯。我們在生成程式的時候,可以選擇 前者會比後者大,因為需要插入除錯資訊,這些資訊就是除錯工具需要的二進位制 debugging symbol 插入到我們寫的程式中,以便於我們使用基本的除錯命令,去檢視記憶體 暫存器,打斷點 除錯啥的?就是找錯的!找...

gdb除錯學習筆記

監視點 watch m 25 只有遍歷所在的記憶體值發生變化,且滿足條件是中斷 列印變數 print j 幫助文件 help breakpoint 產看斷點幫助文件 編譯時 g選項 如果不加同樣能夠除錯,不過不可以檢視變數和行號 注意是編譯過程使用,在鏈結過程沒沒有用 tui介面 ctrl x a ...

GDB學習使用筆記

首先說明我使用的gdb版本及作業系統版本資訊如下 gdb是gnu 的原始碼偵錯程式。fred fish,原真主保佑他,關於他的生平可以在了解一下。這裡有gdb最新版的文件,可以參考!gdb簡介 偵錯程式 比如象gdb 能讓你觀察另乙個程式在執行時的內部活動,或程式出錯時發生了什麼。gdb主要能為你做...