用gdb除錯C與C 程式

2021-07-11 16:15:34 字數 2034 閱讀 3807

1.         gdb簡介:

1)         介紹:

gdb是linux下乙個gnu除錯程式,是用來除錯c與c++程式的強力偵錯程式。能夠讓使用者在程式執行時觀察程式的內部結構和記憶體的使用情況。

2)         功能:

ø 按照自定義的方式啟動執行需要除錯的程式。

ø 可以使用指定位置和條件表示式的方式來設定斷點。

ø 程式暫停時的值的監視。

ø 動態改變程式的執行環境。

2.         編寫示例程式:

為了以下示例容易演示,首先編寫乙個示例程式。

1)         建立乙個c++檔案:

3.         基本操作:

這裡只介紹常用命令的簡單用法,如需讀者想更加深入的了解,還請讀者參照gdb手冊。

1)         基本命令:

ø 基本命令列表:

命令

解釋

簡寫

file

裝入想要除錯的可執行檔案

list

列出產生執行檔案源**的一部分

l

next

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

n

step

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

s

run

執行當前被除錯的程式

r

continue

繼續執行程式

c

quit

終止gdb

q

print

輸出當前指定變數的值

p

btrak

在**裡設定斷點

b

info break

檢視設定斷點的資訊

i b

delete

刪除設定的斷點

d

watch

監視乙個變數的值,一旦值有變化,程式停住

wa

help

gdb中的幫助命令

h

ø 啟動:

ø list命令:

ø step命令:

ø continue命令:

ø print命令:

ø info break命令:

ø watch命令:

2)         輸入技巧:

ø 自動補全:

l 鍵盤上tab鍵

l 演示:

4.         完整除錯:

1)         **分析:

分析示例程式可知此**是乙個從1到10的累加演算法,其中定義了乙個變數n來儲存1-10的累加值,主函式中定義變數i切從1迴圈到10,每一 個迴圈將i值傳入add函式進行累加,並將每次累加後的n值列印出來。在add函式中模擬錯誤,當傳入值為10時,運算n=n/(j-10)將導致除數為 0的情況。

2)         編譯執行與錯誤分析:

ø 編譯執行:

4)         除錯演示:

ø 使用-g選項編譯程式:

l 通過檔案載入的方式:

ø 設定斷點:

l 普通斷點:

由錯誤分析可知,要在進入add()函式時下個斷點,在運算n值表示式時下個斷點,n值的運算有2個地方,乙個是n=n+j(第7行),乙個是n=n/(j-10)(第12行),從而分析其錯誤。

l 刪除斷點:

使用del num來刪除斷點。

使用r(run)執行程式後,程式在add函式入口(第5行)停下,此時j的值為1,由錯誤分析可知,要當j值為10時,程式執行出錯,使用 c(continue)程式繼續執行,在n=n+j斷下(第7行),此時j的值任然是1,再使用c程式繼續執行,程式又在第5行斷下,j值為2,說明主函 數中一次迴圈完成,就這樣不停的c,直至當j值為10時在第5行斷下,使用n(next)單步除錯,程式跳轉到else裡的執行內容n=n/(j- 10),再使用n 單步調試執行n=n/(j/10),執行後報錯,從而得到程式錯誤位置。

l 使用條件斷點:

GDB 除錯 C 程式 core dump

gdb 的一些常用命令,及在程式發生段錯誤後如何通過除錯 core dump 迅速定位到出錯位置.不羅列一大堆命令了,只是把碰到的 用過的整理一下,以後再使用到新的命令,再補充.有幾篇總結的比較好的文章可以參考 linux c c gdb除錯 概述 上 linux c c gdb除錯 概述 下 手把...

用gdb除錯C 的cgi

1.編譯 把編譯檔案中的 strip去掉,如果makefile中含有 增加 g選項 2.環境變數的設定 cgi輸入的變數引數,一般通過環境變數來設定。這點是除錯cgi跟除錯普通c 程式的主要區別。cgi的輸入引數,在cgi中,是通過讀取環境變數來實現的。1 可以在shell中用export設定 on...

用GDB除錯程式

用gdb除錯程式 gdb概述 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...