GDB初次除錯案例

2021-07-24 17:49:33 字數 2024 閱讀 6754

這篇文章是初次嘗試gdb除錯後寫的,這個案例結合了我個人的分析,在gdb第一次執行當中遇到困難的可以看一看。

開始接觸linux核心的第二天,學的是一段小小的程式設計,然後實驗就是使用gdb除錯並糾錯,這裡附上**:

/*  這是乙個有錯誤的c程式   */

#include

#include

static char buff[256];

static char* string;

int main()

目的很明顯,就是手動輸入一段字串,再由計算機獲得資料並實現輸出,也就是說,輸入什麼,就要輸出什麼。

用gedit寫好程式,儲存為test.c,然後開始使用gcc編譯。

在終端輸入gcc + xx.c 即可呼叫gcc進行編譯:

gcc -g test.c -o test(注意:這裡我把經過編譯後的test.c輸出為test,否則預設輸出是a.out,這裡-o就是指定檔名的作用了。-g選項在可執行檔案中加上原始檔資訊.)

我們可以看到,編譯完成之後,資料夾下多出了乙個可執行檔案,即編譯完成後的test。

在終端下輸入:./test  即可執行該程式。試執行: $

./test

please input your string:as                        -------提示輸入字串

segmentation fault(core dumped)         -------段錯誤(吐核)

解釋一下段錯誤及其原因和解決方案請看這裡:

接下來開始gdb除錯。

gdb 是乙個用來除錯 c 和 c++ 程式的強力偵錯程式,它使你能在程式執行時觀察程式的內部結構和記憶體的使用情況。 以下是 gdb 所提供的一些功能:

終端輸入:$

gdb test

(gdb) 【看到(gdb)就代表著進入了gdb的編輯區域了!!!】

載入之後,首先得啟動吧,執行:

(gdb)

runstarting program: /home/xin/文件/huibian/bugging/test

please input your string:as【跟gcc編譯時一樣,提示輸入字串】

program received signal sigsegv, segmentation fault.【同樣出現了段錯誤】

_io_gets (buf=0x0) at iogets.c:55

55          buf[0] = (char) ch;

【上面兩行馬上會在下面提到,看樓下~~】

執行查詢錯誤使用where命令:

(gdb)

where

#0  _io_gets (buf=0x0) at iogets.c:55

#1  0x08048452 in main () at test.c:9

#0  _io_gets (buf=0x0) at iogets.c:55 ———gets函式的緩衝區溢位錯誤;

#1 

0x08048452

in main () at test.c:9  ———由於上面的緩衝區溢位錯誤,使得

在test.c檔案中的第9行呼叫

main函式也出現了錯誤(注:

0x08048452是緩衝區溢位的一種表現)】

由上面的分析知道,在第9行出現的錯誤,即gets(string)附近,使用list命令檢視即9行附近的**:

(gdb) listtest.c:9

1    #include

2    #include

3   

4    static char buff[256];

5    static char* string;

6    int main()

7   

重新編譯,執行:

$ ./test

please input your string:as

your string is:as

這次成功完成了!!!

(撒花!!!~~)

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 設定斷點,用法 ...