Linux技術 gdb除錯基礎

2021-07-10 22:58:53 字數 2924 閱讀 3602

gdb即gnu debugger。

gcc編譯選項-g,這樣生成的目標**中就新增了除錯資訊。

gcc -g –o hello hello.c

gdb完成的大部分工作都可以用很少的命令集合完成。

啟動gdb

gdb 程式名 [corefile]

corefile是可選的,但能增強gdb的除錯能力。

linux預設是不生成corefile的,所以需要在使用者profile檔案中新增

ulimit -c unlimited

修改完成之後讓profile檔案及時生效

乙個有錯的程式

#include 

void test(void)

int main(void)

編譯這個程式

gcc –g –o hello hello.c

執行hello

segmentation fault (core dumped)

程式崩潰

ls core.3563 hello hello.c

我們看到除了hello檔案和hello.c檔案之外多了core檔案

啟動gdb我們做的第一件事就是在gdb環境中執行這個程式

gdb hello

run命令。

starting program: /home/test/1/hello

hello world

program received signal sigsegv, segmentation fault.

0x08048394 in test () at hello.c:5

5 *i = 2;

gdb不但能顯示出錯行號,還能說明出錯出現時的記憶體位址,這個也是潛在的有用資訊。

test函式到底出了什麼問題?

where命令,顯示導致段錯誤的執行函式樹

0 0x08048394 in test () at hello.c:5

1 0x080483be in main () at hello.c:11

問題出在hello.c檔案的第5行。

知道函式出錯行的上下文對除錯程式是很有幫助的。

list[m,n],m,n是要顯示包含錯誤首次出現位置的起始行和結尾行。不帶引數的list將顯示附近的10行**

gdb最有用的功能之一就是它可以顯示被除錯程式中任何表示式、變數的值。

print 變數,表示式。

print 『file』::變數,表示式,『』是必須的,以便讓gdb知道指的是乙個檔名。

print funcname::變數,表示式

(gdb) print i

$1 = (int *) 0x0

顯示指標變數i的值為0。

whatis 命令可以告訴你變數的型別, ptype 告訴你結構的定義。

(gdb) whatis i

type = int *

break命令設定斷點

break linenum

break funcname

break filename:linenum

break filename:funcname

退出gdb,重新進入除錯模式

gdb -q hello

(gdb) break 4

breakpoint 1 at 0x804838a: file hello.c, line 4.

(gdb) run

starting program: /home/test/1/hello

hello world

breakpoint 1, test () at hello.c:4

4 int *i = null;

gdb在第4行停止。

continue命令從斷點以後繼續執行。

delete刪除乙個斷點。

如果設定了很多斷點,忘記了哪些斷點已經觸發,可以使用info break。

(gdb)info break

num type disp enb address what

1 breakpoint keep y 0x0804838a in test at hello.c:4

breakpoint already hit 1 time

改變乙個變數的值。

set variable varname = value

varname是變數名稱,value是變數的新值。

單步除錯

step命令

當遇到乙個函式的時候,step將進入函式,每次執行一條語句,相當於step into

next命令

當遇到乙個函式的時候,next將執行整個函式,相當於step over

return [value]命令

停止執行當前函式,將value返回給呼叫者,相當於step return

如果需要重複執行一條命令,不需要每次都鍵入命令,gdb記住了最後乙個被執行的命令,只要簡單的按enter鍵就可以重複執行最後的命令

更多詳情參考:

linux gdb 程式除錯工具使用詳解

Linux的GDB除錯技術

hchen test 補充gdb除錯中動態顯示執行的 在gdb除錯中,大家都知道使用list命令來顯示 例如 顯示main.c中的main函式附近的 list main.c main 顯示main函式附近的 list main 顯示main.c中的第2到20行的 list main.c 2,20 顯...

Linux除錯技術GDB命令

一 常規除錯 gdb是linux下常用的程式除錯工具,當然前提是用gcc g 編譯時加上 g引數,這樣編譯出的可執行程式會加上gdb除錯資訊。gdb命令不少,但常用的主要包括如下命令 1 list file functuon 命令縮寫是l,檢視原始碼,不加引數時,向下顯示原始碼,加引數 l時,向上顯...

GDB除錯技術

gnu的偵錯程式稱為gdb,該程式是乙個互動式工具,工作在字元模式。在 x window 系統中,有乙個gdb的前端圖形工具,稱為xxgdb。gdb 是功能強大的除錯程式,可完成如下的除錯任務 設定斷點 監視程式變數的值 程式的單步執行 修改變數的值。在可以使用 gdb 除錯程式之前,必須使用 g ...