GDB使用詳解

2021-07-02 01:03:30 字數 2637 閱讀 3777

一、開啟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...