国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
用gdb調(diào)試C與C++程序

用gdb調(diào)試C與C++程序

http://huobumingbai.blog.51cto.com/1196746/310438

1.         GDB簡介:
1)         介紹:
GDB是Linux下一個(gè)GNU調(diào)試程序,是用來調(diào)試C與C++程序的強(qiáng)力調(diào)試器。能夠讓用戶在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況。
2)         功能:
Ø 按照自定義的方式啟動運(yùn)行需要調(diào)試的程序。
Ø 可以使用指定位置和條件表達(dá)式的方式來設(shè)置斷點(diǎn)。
Ø 程序暫停時(shí)的值的監(jiān)視。
Ø 動態(tài)改變程序的執(zhí)行環(huán)境。
2.         編寫示例程序:
為了以下示例容易演示,首先編寫一個(gè)示例程序。
1)         創(chuàng)建一個(gè)C++文件:

2)         寫入代碼:

3.         基本操作:
這里只介紹常用命令的簡單用法,如需讀者想更加深入的了解,還請讀者參照gdb手冊。
1)         基本命令:
Ø 基本命令列表:

命令
解釋
簡寫
file
裝入想要調(diào)試的可執(zhí)行文件
list
列出產(chǎn)生執(zhí)行文件源代碼的一部分
l
next
執(zhí)行一行源代碼但不進(jìn)入函數(shù)內(nèi)部
n
step
執(zhí)行一行源代碼而且進(jìn)入函數(shù)內(nèi)部
s
run
執(zhí)行當(dāng)前被調(diào)試的程序
r
continue
繼續(xù)執(zhí)行程序
c
quit
終止GDB
q
print
輸出當(dāng)前指定變量的值
p
btrak
在代碼里設(shè)置斷點(diǎn)
b
info break
查看設(shè)置斷點(diǎn)的信息
i b
delete
刪除設(shè)置的斷點(diǎn)
d
watch
監(jiān)視一個(gè)變量的值,一旦值有變化,程序停住
wa
help
GDB中的幫助命令
h
Ø 啟動:

Ø file命令:

Ø list命令:

Ø next命令:

Ø step命令:

Ø run命令:

Ø continue命令:

Ø quit命令:

Ø print命令:

Ø break命令:

Ø info break命令:

Ø delete命令:

Ø watch命令:

Ø help命令:

2)         輸入技巧:
Ø 自動補(bǔ)全:
鍵盤上Tab鍵
演示:

輸入r后,按2下Tab鍵,GDB將會把所有是r開頭的命令顯示出來。輸入ru后,按1下Tab鍵,如果以ru開頭的命令只有一個(gè),GDB將會把它自動補(bǔ)全。
Ø 執(zhí)行上條語句:
鍵盤上回車鍵
演示:

4.         完整調(diào)試:
1)         代碼分析:
分析示例程序可知此代碼是一個(gè)從1到10的累加算法,其中定義了一個(gè)變量n來存儲1-10的累加值,主函數(shù)中定義變量i切從1循環(huán)到10,每一個(gè)循環(huán)將i值傳入add函數(shù)進(jìn)行累加,并將每次累加后的n值打印出來。在add函數(shù)中模擬錯(cuò)誤,當(dāng)傳入值為10時(shí),運(yùn)算n=n/(j-10)將導(dǎo)致除數(shù)為0的情況。
2)         編譯運(yùn)行與錯(cuò)誤分析:
Ø 編譯運(yùn)行:

Ø 錯(cuò)誤分析:
此時(shí)n值為45,i值為10,在計(jì)算45+10的時(shí)候,出現(xiàn)了浮點(diǎn)數(shù)例外的錯(cuò)誤,那么也就是說在add()函數(shù)中計(jì)算n值的表達(dá)式有問題,這樣我們可以下2個(gè)斷點(diǎn),在進(jìn)入add()函數(shù)時(shí)下個(gè)斷點(diǎn),在運(yùn)算n值表達(dá)式時(shí)下個(gè)斷點(diǎn)?;蛘咴O(shè)置一個(gè)當(dāng)j值為10的條件斷點(diǎn),從而分析其錯(cuò)誤。
3)         調(diào)試選項(xiàng):
Ø -g
-g選項(xiàng)告訴GCC產(chǎn)生能被GNU調(diào)試器使用的調(diào)試信息以便調(diào)試你的程序。GCC提供了一個(gè)很多其他C編譯器里沒有的特征,在GCC里你能使-g和-O聯(lián)用。
演示:

4)         調(diào)試演示:
Ø 使用-g選項(xiàng)編譯程序:

Ø 啟動GDB:
通過直接啟動的方式:

通過文件載入的方式:

Ø 查看源文件:

Ø 設(shè)置斷點(diǎn):
普通斷點(diǎn):
由錯(cuò)誤分析可知,要在進(jìn)入add()函數(shù)時(shí)下個(gè)斷點(diǎn),在運(yùn)算n值表達(dá)式時(shí)下個(gè)斷點(diǎn),n值的運(yùn)算有2個(gè)地方,一個(gè)是n=n+j(第7行),一個(gè)是n=n/(j-10)(第12行),從而分析其錯(cuò)誤。

Info break為查看斷點(diǎn)信息,可以看到我們在函數(shù)的入口(第5行)和n值運(yùn)算(第7與12行)設(shè)置了斷點(diǎn)。
條件斷點(diǎn):
設(shè)置一個(gè)當(dāng)j值為10的條件斷點(diǎn)。

刪除斷點(diǎn):
使用del Num來刪除斷點(diǎn)。

Ø 調(diào)試:
使用普通斷點(diǎn):

使用r(run)運(yùn)行程序后,程序在add函數(shù)入口(第5行)停下,此時(shí)j的值為1,由錯(cuò)誤分析可知,要當(dāng)j值為10時(shí),程序運(yùn)行出錯(cuò),使用c(continue)程序繼續(xù)運(yùn)行,在n=n+j斷下(第7行),此時(shí)j的值任然是1,再使用c程序繼續(xù)運(yùn)行,程序又在第5行斷下,j值為2,說明主函數(shù)中一次循環(huán)完成,就這樣不停的c,直至當(dāng)j值為10時(shí)在第5行斷下,使用n(next)單步調(diào)試,程序跳轉(zhuǎn)到else里的運(yùn)行內(nèi)容n=n/(j-10),再使用n 單步調(diào)試執(zhí)行n=n/(j/10),執(zhí)行后報(bào)錯(cuò),從而得到程序錯(cuò)誤位置。
使用條件斷點(diǎn):

使用r(run)運(yùn)行程序后,程序在第5行斷下,由于所設(shè)置斷點(diǎn)的條件為if j=10,所以此時(shí)的j值為10,使用p j(printj)輸出此時(shí)j的值,使用n(next)單步調(diào)試,程序跳轉(zhuǎn)到else里的運(yùn)行內(nèi)容n=n/(j-10),再使用n單步調(diào)試執(zhí)行n=n/(j/10),執(zhí)行后報(bào)錯(cuò),從而得到程序錯(cuò)誤位置。
說明:
此例并不是為了說明條件斷點(diǎn)比普通斷點(diǎn)好,只是為了靈活使用2種斷點(diǎn)用法而舉例,對于某一程序具體設(shè)置什么斷點(diǎn)好還需另行分析。
Ø 退出:




本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
關(guān)于在Linux系統(tǒng)中的gdb命令知識
gdb調(diào)試程序之單步調(diào)試【三】
gdb調(diào)試
minGW的gdb調(diào)試
GDB調(diào)試器原來那么簡單
gdb常用命令 — Windows Live
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服