有關GDB除錯的整理

2021-10-09 10:48:57 字數 4167 閱讀 3931

使用gdb除錯,要在編譯時使用 - g 進入除錯。如果沒有-g,將看不見程式的函式名、變數名,所代替的全是執行時的記憶體位址。

預設生成的可執行檔案a.out

g++ test.cpp -g

gdb a.out

自己定義生成的可執行檔案test

g++ test.cpp -o test -g

gdb test

如果程式需要引數

常用命令:

start [ arguments ]

#開始除錯 停在第一行** 如有需要可以在後面加引數。

(gdb) start

(gdb) start ./file 5

l [ line / func ]

#list的縮寫 檢視行數或函式入口前後幾行的源**

#break的簡寫,在某一行或某乙個函式入口處設定斷點。

#在檔名為filename的某行或某個函式處設定斷點。

#info的簡寫,檢視斷點或觀察點資訊。

#delete 的簡寫,刪除指定編號的內容,或刪除所有。編號從1開始遞增。

[注] 此處是以斷點為例,編號實際對應可能是斷點或觀察點。

s#step的簡寫,執行一行源程式**,如果此行**中有函式呼叫,則進入該函式。

(gdb) s

(gdb) step

n

#next的簡寫,執行一行源程式**,此行**中的函式呼叫也一併執行。

(gdb) n

(gdb) next

r

#run的簡寫,執行被除錯的程式。如果此前沒有下過斷點,則執行完整個程式;如果有斷點,則程式暫停在第乙個可用斷點處。需要引數的程式,可以在執行時加上引數。

(gdb) r

(gdb) run

(gdb) r ./file 5

(gdb) run ./file 5

c#continue的簡寫,繼續執行被除錯程式,直至下乙個斷點或程式結束。

(gdb) c

(gdb) continue

finish

#函式結束

p [ var ]

#print的簡寫,顯示指定變數(臨時變數或全域性變數 例如 int a)的值。

(gdb) p a

(gdb) print a

watch [ var ]

#對指定變數(例如 int a)進行監控。

(gdb) watch a

display [ var ]

#設定想要跟蹤的變數(例如 int a)。

(gdb) display a

(gdb) disp a

undisplay [ varnum ]

#取消對變數的跟蹤,被跟蹤變數用整型數標識。

(gdb) undisplay 1

(gdb) undisp 1

如果忘記設定跟蹤的變數的序號 同樣可以使用info來檢視

(gdb) info disp

set args [ arguments ]

#可指定執行時引數。

(gdb) set args 10

(gdb) set args ./file 5

show args

#檢視執行時引數。

(gdb) show args

q#quit的簡寫,退出gdb除錯環境。

#gdb幫助命令,提供對gdb名種命令的解釋說明。如果指定了「命令名稱」引數,則顯示該命令的詳細說明;如果沒有指定引數,則分類顯示所有gdb命令,供使用者進一步瀏覽和查詢。

enter回車鍵

#重複前面的命令,

(gdb) 回車

關閉分頁顯示

有的時候gdb要列印的東西會被分頁, 這是會顯示type return to continue,or q to quit

如果想要去掉分頁,執行以下命令

(gdb) set pagination off

bt

backtrace的縮寫, 可以檢視當前的堆疊資訊。可以使用help stack來獲取更多幫助

(gdb) bt

(gdb) backtrace

當我們打了乙個斷點時,可以在斷點處給到一些命令讓他去執行

比如

(gdb) b main

breakpoint 1 at 0x6c079e: file main.cpp, line 107.

(gdb) commands 1

type commands for breakpoint(s) 1, one per line.

end with a line saying just 「end」.

>p name

>c

>end

(gdb)

上面的操作我們可以看到, 是在main函式打了乙個斷點, 然後給這個1號斷點加了一些命令去執行:列印name這個變數;繼續執行程式

我們輸入end作為命令的結束

如果想要清空斷點處的命令,則輸入commands後直接輸入end結束即可

GDB除錯命令整理

基本功能 列印堆疊 bt backtrace 檢視 根據行號 list xx 檢視xx行 檢視除錯所處範圍 當前偵 frame 斷點新增斷點 根據行號新增 break xx,在xx行新增斷點 break xx,在當前行前面xx行新增斷點 break xx,在當前行後面xx行新增斷點 根據檔名和行號新...

gdb 跟蹤除錯命令整理

內容源自於陳浩csdn部落格的用gdb除錯程式一系列文章 要進行除錯程式首先要生成乙個含有除錯資訊的執行程式命令如下 此時便會生成乙個含有除錯資訊的可執行檔案,然後便可以用 gdb 去除錯這個程式了,進入除錯程式命令,但是如果用 gdb 去除錯乙個未包含除錯資訊的可執行檔案則會發生錯誤 執行 gdb...

GDB除錯超詳細整理

centos7.5 yun install gdb gdb v檢查 gdb常用指令 linux下gdb除錯c linux下偵錯程式gdb makefile的使用 如何用gdb除錯以daemon程序執行的服務 用gdb除錯程式 一 有一些程式會使用到deamon 無法直接gdb,只能查到該程序的pid...