一、開啟gdb
1、gdb filename
載入該檔案到gdb
2、gdb
file filename
如果gdb filename失敗,可以在開啟gdb以後,通過file來載入除錯檔案
3、gdb -tui
file filename
帶畫面的除錯
如果顯示上圖的資訊說明,沒有指定檔案,或者沒有除錯資訊。
*注意-g,在linux下用gcc編譯時,如果不加-g,編譯器會進行優化,就不會生成除錯資訊,無法除錯,也可以使用-ggdb,這是gcc為gdb提供的更詳細的除錯資訊,別的偵錯程式無法使用。
二、常見命令
l(list):顯示**,list 行號:將顯示當前檔案以「行號」為中心的前後10行**,如:list 12,list 函式名:將顯示「函式名」所在函式的源**,如:list main;
b(break):設定斷點,引數可以是行數,函式名,也可以用檔名:行數或者檔名:函式名;
tb(tbreak):臨時斷點,引數和b的一樣;
info b(i b/info break):檢視斷點,檢視斷點;
例:如下圖,通過b設定斷點,如果要為斷點指定原始檔,使用b helloworld.c:10(源檔名:行數或者函式名),列num的數字123是斷點序號,disp為keep的表示為普通斷點,為del的則為臨時斷點,enb是斷點是否有效,y為有效,無效為n
clear n:清除第n行的斷點;
d (delete) n:刪除第n個斷點;
disable n:暫停第n個斷點;
enable n:開啟第n個斷點;
例:下圖是刪除斷點和暫停開始和清楚的示例
r (run):執行程式;
s(step):有函式時,進入函式函式體,沒有時,單步執行;
n (next):單步執行,不進入函式體;
c (continue):遇到斷點以後,程式會阻塞,輸入c可以讓程式繼續執行;
p (print):列印表示式,表示式可以是變數,也可以是操作,也可以是函式呼叫 print 1,print a+1 print f(a);
until:可以執行程式直到退出迴圈體;
finish:執行程式,直到當前函式完成返回,並列印函式返回時的堆疊位址和返回值及引數值等資訊;
watch:設定乙個監視點,一旦被監視的「表示式」的值改變,gdb將強行終止正在被除錯的程式;
frame n:移動到指定的棧幀,並列印棧的資訊,n為幀編號,如果不指定n,列印當前棧的資訊;
set args 引數:指定執行時的引數;
show args:檢視設定好的引數;
show paths:檢視程式執行路徑;set environment varname [=value] 設定環境變數。show environment [varname] 檢視環境變數;
cd 相當於shell的cd;
pwd :顯示當前所在目錄;
info program: 來檢視程式的是否在執行,程序號,被暫停的原因;
bt(backtrace):檢視堆疊資訊,因為棧是後進先出,所以要從下往上看,最下面的是最先執行的函式;
threads:檢視所有執行緒資訊;
shell ***:執行shell命令列,***為shell命令,如shell ls就執行shell裡的ls命令;
thread n:切換執行緒,引數為執行緒號,可以通過threads檢視,一般常用的是通過threads檢視線程式號,通過thread n切換過去,再用bt檢視執行緒棧的資訊;
condition:給斷點設定觸發條件,比如b 10 if a > b與b 10然後condition 1 if a> b等價(假設b 10的斷點號為1),取消斷點條件用condition 斷點號;
ignore:特殊斷點條件,程式只有到達該斷點指定次數以後才會觸發,ignore 1 10,忽略斷點號為1的斷點10次以後才觸發;
kill:將強行終止當前正在除錯的程式;
help 命令:help 命令將顯示「命令」的常用幫助資訊;
call 函式(引數):呼叫「函式」,並傳遞「引數」,如:call gdb_test(55);
layout:用於分割視窗,可以一邊檢視**,一邊測試;
layout src:顯示源**視窗;
layout asm:顯示反彙編視窗;
layout regs:顯示源**/反彙編和cpu暫存器視窗;
layout split:顯示源**和反彙編視窗;
display: 在每次單步進行指令後,緊接著輸出被設定的表示式及值;
stepi或nexti:單步跟蹤一些機器指令;
ctrl + l:重新整理視窗;
quit:簡記為 q ,退出gdb;
回車:重複上一條命令;
執行下一步操作,注意命令列此時顯示的並不是當前執行的操作,而是下一次要執行的。
《GDB命令詳解》
gdb 命令詳細解釋 linux中包含有乙個很有用的除錯工具 gdb gnu debuger 它可以用來除錯c和c 程式,功能不亞於windows下的許多圖形介面的除錯工具。和所有常用的除錯工具一樣,gdb提供了以下功能 監視程式中變數的值 在程式中設定斷點 程式的單步執行 在使用gdb前,必須先載...
gdb命令詳解
1.列出檔案清單 gdb listline1,line22.執行程式 gdb run 3.顯示資料 gdb print p p為變數名 gdb whatis p 顯示命令型別 gdb print function name 對程式中函式呼叫 gdb print4.打斷點 break可簡寫為b gdb...
GDB除錯詳解
gdb除錯命令 linux下的c 程式開發,makefile,cmake等編譯工具最終都是呼叫gcc這一編譯工具組。一般要除錯某個程式,為了清晰地看到除錯的每一行 呼叫的堆疊資訊,變數名和函式名等資訊,需要除錯程式含有除錯符號資訊。那麼判斷乙個可執行程式是否帶有除錯資訊?gdb hello worl...