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主要能為你做...