GDB本地除錯

2021-10-04 13:46:33 字數 2292 閱讀 9615

1.gdb 介紹gdb 可以在命令列下啟動,通過命令列對程式進行除錯; gdb 也有自己的圖形前端,如 ddd。無論通過何種方式啟動 gdb,通過 gdb 能夠對程式進行如下除錯:

● 執行程式,還可以給程式加上某些引數,指定程式的行為。

● 使程式在特定的條件下停止。

● 檢查程式停止時的執行狀態。

● 改變程式的引數,以糾正程式中的錯誤

2. gdb 基本命令

需要使用 gdb 除錯的程式,在編譯的時候必須加-g 引數,開啟除錯資訊。執行 gdb,除錯程式通常使用如下方式:

gdb 常用的基本命令 命令

功能描述

break

設定斷點:break + 要設定斷點的行號

clear

清除斷點:clear + 要清除斷點的行號

delete

用於清除斷點和自動顯示的表示式的命令

disable

讓所設斷點暫時失效

enable

與disable相對

run執行除錯程式

continute

繼續執行正在除錯的程式

next

執行一行**,但不進入函式內部

step

執行一行**,而且進入函式內部

list

列出源**的一部分

print

print + 變數名:輸出該變數名的值

watch

watch + 變數名:監視乙個變數的值

quit

退出kill

終止除錯程式

3.gdb 除錯範例

編寫hello_error.c,這裡取名error,是因為這是乙個bug的原始檔

#include int *p = null;

void hello_print(void)

int main(int argc,char *ar**)

1.編譯輸出帶除錯資訊的可執行檔案,這個檔案通常會比一般情況下生成的可執行檔案的大,因為-g 輸出的檔案是包含很多除錯引數在裡面。

2.我們先執行一下hello_error1

./hello_error1
從除錯資訊中我們發現,出現記憶體段錯誤,原因是我們給指標p賦值,這個是指標是野指標,指向的是0位址,現在我們給0位址賦值,所以出現了錯誤。

我們使用gdb來除錯這個程式:

輸入help,可檢視相應的幫助資訊。

輸入 run 命令,開始除錯程式

然後就停止在了錯誤的地方

我們也可以輸入where命令,來定位問題:

很明顯在原始檔14行出現了問題

我們輸入list命令,檢視下原始檔**

我們先在13行打個斷點 break 13,然後輸入run,重新執行,然後程式就會執行到第13行,停止

然後輸入step,進入hello_print函式體,然後在輸入next,執行下一步,輸出hello world

列印輸出p

print p

給非法位址賦值,導致段錯誤

gdb 除錯 vs除錯

一 先要生成二進位制檔案 g g 1.cpp o 1.out g引數不要省,不然 gdb l 引數用不了 二 引數 設定斷點 設定 函式斷點break func 在某行設定斷點break 7 檢視斷點資訊 info break 刪除斷點 d 刪除所有斷點 d 3 刪除第三個 執行 r 下一步 n 逐...

GDB除錯命令以及GDB除錯段錯誤

一 gdb的除錯命令。c語言是 cc g tst.c o tst c 是g g o 生成的檔案 file.cpp c 除錯程式命令 gdb file 啟動,羅列 行數ist 1,break 行數 info break,run r 除錯執行,step s 單步除錯,檢視變數 print p 變數名,檢...

gdb除錯命令

一 gdb常用命令簡介 rrun 執行.程式還沒有執行前使用 c cuntinue 執行到下一斷點處 qquit 退出tab tab命令補全功能 h help幫助s step 跟入函式 nnext 執行下一行的 如果是函式呼叫,也當作一行 執行到此函式返回 b breakpoint 設定斷點,用法 ...