gdb除錯
程式碼偵錯程式
避免不了,程式會出現bug,但是使用命令列編譯出錯後是沒有除錯資訊的(g++編譯時),因此我們需要使用gdb對程式進行除錯
這次主要介紹GDB指令,其他編譯方法和指令請自行上網查詢!
啟動gdb後,可以進入到互動模式,通過以下命令對程式完成除錯工作!
編譯時加上-g引數 生成符號檔案
g++ -g -std=c++11 main.cpp
gdb a.out
執行指令
run(簡寫r):
執行程式,當遇到斷點後,程式會在斷點處停止執行,等待使用者輸入下一步命令
continue(簡寫c) :
繼續執行,到下一個斷點停止(或執行結束)
next(簡寫n) : 單步步過
單步跟蹤程式,當遇到函式呼叫時,也不進入此函式體;此命令同 step 的主要區別是,step 遇到使用者自定義的函式,將步進到函式中去執行,而 next 則直接呼叫函式,不會進入到函式體內。
step (簡寫s): 單步步入
單步除錯如果有函式呼叫,則進入函式;與命令n不同,n是不進入呼叫的函式的
until(簡寫u):
當你厭倦了在一個迴圈體內單步跟蹤時,這個命令可以執行程式直到退出迴圈體。
until+行號:
執行至某行,不僅僅用來跳出迴圈
finish:
執行程式,直到當前函式完成返回,並列印函式返回時的堆疊地址和返回值及引數值等資訊。
call 函式(引數):
呼叫程式中可見的函式,並傳遞“引數”,如:call gdb_test(55)
quit(簡寫q) :
退出gdb
設定斷點:
break n (簡寫b n):
在第n行處設定斷點(可以帶上程式碼路徑和程式碼名稱: b OAGUPDATE.cpp:578)
b fn1 if a>b:
條件斷點設定
break func(break縮寫為b):
在函式func()的入口處設定斷點,如:break cb_button
delete 斷點號n:
刪除第n個斷點
disable 斷點號n:
暫停第n個斷點
enable 斷點號n:
開啟第n個斷點
clear 行號n:
清除第n行的斷點
info b (info breakpoints) :
顯示當前程式的斷點設定情況
delete breakpoints:
清除所有斷點:
檢視原始碼:
list :
簡記為 l ,其作用就是列出程式的原始碼,預設每次顯示10行。
list 行號:
將顯示當前檔案以“行號”為中心的前後10行程式碼,如:list 12
list 函式名:
將顯示“函式名”所在函式的原始碼,如:list main
list :
不加粗樣式帶引數,將接著上一次 list 命令的,輸出下邊的內容。
列印表示式
print 表示式(簡記p):
其中“表示式”可以是任何當前正在被測試程式的有效表示式,比如當前正在除錯C語言的程式,那麼“表示式”可以是任何C語言的有效表示式,包括數字,變數甚至是函式呼叫。
print a:
將顯示整數 a 的值
print ++a:
將把 a 中的值加1,並顯示出來
print name:
將顯示字串 name 的值
print gdb_test(22):
將以整數22作為引數呼叫 gdb_test() 函式
print gdb_test(a):
將以變數 a 作為引數呼叫 gdb_test() 函式
display 表示式:
在單步執行時將非常有用,使用display命令設定一個表示式後,它將在每次單步進行指令後,緊接著輸出被設定的表示式及值。如: display a
watch 表示式:
設定一個監視點,一旦被監視的“表示式”的值改變,gdb將強行終止正在被除錯的程式。如: watch a
whatis :
查詢變數或函式
info function:
查詢函式
擴充套件info locals:
顯示當前堆疊頁的所有變數
查詢執行資訊
where/bt :
當前執行的堆疊列表;
bt backtrace
顯示當前呼叫堆疊
up/down
改變堆疊顯示的深度
set args 引數:
指定執行時的引數
show args:
檢視設定好的引數
info program:
來檢視程式的是否在執行,程式號,被暫停的原因。
相關文章
- GDB除錯MySQL除錯MySql
- gdb除錯命令除錯
- GDB除錯指令除錯
- GDB 除錯程式碼除錯
- gdb除錯多程式除錯
- GDB除錯彙總除錯
- 用GDB除錯程式除錯
- GDB多程式除錯除錯
- gdb除錯快速上手除錯
- gdb除錯多程序除錯
- gdb除錯總結除錯
- 介紹 GDB 除錯 Go除錯Go
- GDB除錯命令詳解除錯
- C語言——gdb除錯C語言除錯
- 用GDB除錯程式(六)除錯
- GDB除錯使用記錄除錯
- Codeblocks和gdb除錯BloC除錯
- linux 下GDB除錯Linux除錯
- gdb高階除錯方法高階除錯
- 使用 gdb 工具除錯 Go除錯Go
- gdb除錯coredump檔案除錯
- gdb高階除錯命令高階除錯
- C編譯: 使用gdb除錯編譯除錯
- Linux核心使用gdb除錯Linux除錯
- C 編譯: 使用 gdb 除錯編譯除錯
- GDB程式碼除錯與使用除錯
- 使用 GDB 除錯多程式程式除錯
- 使用gdb編譯除錯mysql編譯除錯MySql
- 用GDB除錯程式(二) (轉)除錯
- 用GDB除錯程式(四) (轉)除錯
- 用GDB除錯程式(三) (轉)除錯
- gdb除錯傳入引數除錯
- gdb除錯命令小結_與多檔案除錯_遠端除錯除錯
- Linux中使用GDB除錯程式Linux除錯
- GDB除錯基礎使用方法除錯
- OpenHarmony系統使用gdb除錯init除錯
- GDB多執行緒除錯分析執行緒除錯
- linux下gdb單步除錯Linux除錯