国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

gdb基本用法

2019-11-17 05:14:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  相關(guān)網(wǎng)站
http://www.jimmy-lam.com/studyarea/goldencat/debug.htm
http://phi.sinica.edu.tw/~tyuan/pcfarm.old/manuals/gnu/gdb_basic.Html


GDB的使用

當(dāng)程序出錯(cuò)并產(chǎn)生core 時(shí)
快速定位出錯(cuò)函數(shù)的辦法
gdb 程序名 core文件名(一般是core,也可能是core.xxxx)

調(diào)試程序使用的鍵
r run 運(yùn)行.程序還沒(méi)有運(yùn)行前使用
c cuntinue 繼續(xù)運(yùn)行。運(yùn)行中斷后繼續(xù)運(yùn)行
q 退出
kill 終止調(diào)試的程序
h help 幫助
<tab> 命令補(bǔ)全功能

step 跟入函數(shù)
next 不跟入函數(shù)
b breakpoint 設(shè)置斷點(diǎn)。
用法:
b 函數(shù)名 對(duì)此函數(shù)進(jìn)行中斷
b 文件名:行號(hào) 對(duì)此文件中指定行中斷.假如是當(dāng)前文件,那么文件名與:號(hào)可以
省略
看當(dāng)前斷點(diǎn)數(shù)使用info break.禁止斷點(diǎn)disable 斷點(diǎn)號(hào).刪除delete 斷點(diǎn)號(hào).

l list 列出代碼行。一次列10 行。連接使用list將會(huì)滾動(dòng)顯示. 也可以在list 后面
跟上 文件名:行號(hào)
watch 觀察一個(gè)變量的值。每次中斷時(shí)都會(huì)顯示這個(gè)變量的值
p PRint 打印一個(gè)變量的值。與watch不同的是print只顯示一次
這里在順便說(shuō)說(shuō)如何改變一個(gè) value. 當(dāng)你下指令 p 的時(shí)候,例如你用 p b,
這時(shí)候你會(huì)看到 b 的 value, 也就是上面的 $1 = 15.
你也同樣可以用 p 來(lái)改變一個(gè) value, 例如下指令 p b = 100 試試看,
這時(shí)候你會(huì)發(fā)現(xiàn), b 的 value 就變成 100 了:$1 = 100.



網(wǎng)上抄錄
基本的使用方法簡(jiǎn)介
前言
程序代碼中的錯(cuò)誤可分為數(shù)類(lèi),除了最輕易除錯(cuò)的語(yǔ)法錯(cuò)誤,編譯程序會(huì)告訴你錯(cuò)誤所在外,大部分的錯(cuò)誤都可以歸類(lèi)為執(zhí)行時(shí)錯(cuò)誤。GDB 的功能便是尋找執(zhí)行時(shí)錯(cuò)誤。假如沒(méi)有除錯(cuò)程序,我們只能在程序中加入輸出變量值的指令來(lái)了解程序執(zhí)行的狀態(tài)。有了 GDB 除錯(cuò)程序,我們可以設(shè)定在任何地方停止程序的執(zhí)行,然后可以隨意檢視變量值及更動(dòng)變量,并逐行執(zhí)行程序。
一個(gè)除錯(cuò)程序執(zhí)行的流程通常是這樣的:

1. 進(jìn)入除錯(cuò)程序并指定可執(zhí)行文件。
2. 指定程序代碼所在目錄。
3. 設(shè)定斷點(diǎn)后執(zhí)行程序。
4. 程序于斷點(diǎn)中斷后,可以 (1)檢視程序執(zhí)行狀態(tài);檢視變量值或變更變量值 (2) 逐步執(zhí)行程序,或是全速執(zhí)行程序到下一個(gè)斷點(diǎn)或是到程序結(jié)束為止。
5. 離開(kāi)除錯(cuò)程序。
以下將分為下列數(shù)項(xiàng)分別介紹:
1. 進(jìn)入 GDB 及指定可執(zhí)行檔
2. 指定程序代碼所在目錄及檢視程序代碼
3. 斷點(diǎn)的設(shè)定與清除
4. 全速及逐步執(zhí)行程序
5. 檢視及更改變量值
6. 檢視程序執(zhí)行狀態(tài)
7. 讀取 Core 文件信息
進(jìn)入 GDB 及指定可執(zhí)行檔:
1. 進(jìn)入 GDB 并讀入可執(zhí)行檔 (檔名為 'PROGRAM'),預(yù)備進(jìn)行除錯(cuò)。
gdb PROGRAM
指定程序代碼所在目錄及檢視程序代碼
1. 增加目錄 DIR 到收尋程序代碼的目錄列表 (假如你的程序代碼和可執(zhí)行檔放在同一個(gè)目錄下,就不須指定程序代碼所在目錄。):
(gdb) Directory DIR

2. 檢視程序代碼,格式計(jì)有:
(gdb) list => 顯示目前執(zhí)行程序代碼前后各五行的程序代碼;或是顯示從上次 list 之后的程序代碼
(gdb) list function => 顯示該程序開(kāi)始處前后五行的程序代碼。
(gdb) list - =>上次顯示程序代碼的前面的十行。
斷點(diǎn)的設(shè)定與清除
1. 設(shè)定斷點(diǎn)(指令為 break,可簡(jiǎn)寫(xiě)為 (b),格式計(jì)有:
(gdb) break filename.c:30 => 在 filename.c 的第三十行處停止執(zhí)行。
(gdb) break function => 在進(jìn)入 function 時(shí)中斷程序的執(zhí)行。
(gdb) break filename.c:function => 在程序代碼檔 filename.c 中的函數(shù) function 處設(shè)定斷點(diǎn)。
(gdb) break => 在下一個(gè)將被執(zhí)行的命令設(shè)定斷點(diǎn)。
(gdb) break ... if cond => 只有當(dāng) cond 成立的時(shí)候才中斷。cond 須以 C 語(yǔ)言的語(yǔ)法寫(xiě)成。

2. 顯示各個(gè)斷點(diǎn)的信息。
(gdb) info break

3. 清除斷點(diǎn)(命令為 clear),格式同 break 。例如 :
(gdb) clear filename.c:30

4. 清除斷點(diǎn),NUM 是在 info break 顯示出來(lái)的斷點(diǎn)編號(hào)。
(gdb) delete NUM
全速及逐步執(zhí)行程序
1. 從程序開(kāi)頭全速執(zhí)行程序,直到碰到斷點(diǎn)或是程序執(zhí)行完畢為止。
(gdb) run

2. 在程序被中斷后,全速執(zhí)行程序到下一個(gè)斷點(diǎn)或是程序結(jié)束為止 (continue 指令可簡(jiǎn)寫(xiě)為 c)。
(gdb) continue

3. 執(zhí)行一行程序. 若呼叫函數(shù), 則將該包含該函數(shù)程序代碼視為一行程序 (next 指令可簡(jiǎn)寫(xiě)為 n)。

(gdb) next

4. 執(zhí)行一行程序. 若呼叫函數(shù), 則進(jìn)入函數(shù)逐行執(zhí)行 (step 指令可簡(jiǎn)寫(xiě)為 s)。
(gdb) step

5. 執(zhí)行一行程序,若此時(shí)程序是在 for/while/do loop 循環(huán)的最后一行,則一直執(zhí)行到循環(huán)結(jié)束后的第一行程序后停止 (until 指令可簡(jiǎn)寫(xiě)為 u)。
(gdb) until

6. 執(zhí)行現(xiàn)行程序到回到上一層程序?yàn)橹埂?br />(gdb) finish
檢視及更改變量值
1. print 敘述,顯示該敘述執(zhí)行的結(jié)果 (print 指令可簡(jiǎn)寫(xiě)為 p)。如
(gdb) print a => 顯示 a 變量的內(nèi)容.
(gdb) print sizeof(a) => 顯示 a 變量的長(zhǎng)度.

2. display 敘述,在每個(gè)斷點(diǎn)或是每執(zhí)行一步時(shí)顯示該敘述值。如
(gdb) display a

3. 更改變量值:
(gdb) print (a=10) => 將變量 a 的值設(shè)定為 10.

檢視程序執(zhí)行狀態(tài)
1. 查看程序執(zhí)行到此時(shí),是經(jīng)過(guò)哪些函數(shù)呼叫的程序 (backtrace 指令可簡(jiǎn)寫(xiě)為 BT),也就是查看函數(shù)呼叫堆棧。
(gdb) backtrace
讀取 Core 文件信息
1. 讀入 PROGRAM 及 PROGRAM.CORE 檔,可檢視 Core Dump 時(shí)程序變量值及程序流程狀態(tài) 。
gdb PROGRAM core
說(shuō)明:'core' 檔案是由 PROGRAM 檔執(zhí)行后,碰到 Core Dump 時(shí)產(chǎn)生的 Core 檔檔名。假如你還需要該 Core 檔,我們建議你將該檔案檔名更改為 PROGRAM.core。在輸入上述命令后,你可以用 GDB 提供的檢視變量值以及檢視程序執(zhí)行狀態(tài)來(lái)讀取程序 Core Dump 時(shí)的狀態(tài)。

補(bǔ)充一點(diǎn)兒
(最近我剛在用gdb,感覺(jué)還不錯(cuò),不過(guò)有的時(shí)候還是眼睛加printf更好
使)
我更多是用gdb直接調(diào)試程序,而不是core

gdb 可執(zhí)行文件名 (進(jìn)入gdb環(huán)境)

set ags -? (設(shè)置參數(shù),即向你要調(diào)試的程序傳參)

另外,用break functionName 和break lineNum都可以設(shè)置斷點(diǎn)
用info break 可以查看當(dāng)前斷點(diǎn)的信息
用clear清除斷點(diǎn)的時(shí)候要和break相對(duì)應(yīng)
假如是用functionName設(shè)置的斷點(diǎn)就只能 clear functionName
用lineNum設(shè)置的斷點(diǎn)就只能用clear lineNum

BTW:可以到www.sunfreeware.com去下載gdb

以上是我近幾天學(xué)習(xí)gdb的一點(diǎn)經(jīng)驗(yàn),都是我犯過(guò)錯(cuò)誤的地方
希望對(duì)與我等同類(lèi)的gdb菜鳥(niǎo)們有所幫助。

假如是剛開(kāi)始時(shí)也可以使用ddd
圖形化的

另外對(duì)于斷點(diǎn)可以使用
delete 斷點(diǎn)號(hào)
刪除
斷點(diǎn)號(hào)可以使用info break 得到

我也說(shuō)說(shuō)我的體會(huì):
r (程序運(yùn)行的參數(shù)) 可以設(shè)置運(yùn)行時(shí)的參數(shù)
shell 運(yùn)行shell環(huán)境的東西,比如shell make,完了以后直接r重新啟動(dòng)程序,就可以帶上次已經(jīng)加過(guò)的參數(shù)運(yùn)行,不用再敲參數(shù)了
b 文件名:行號(hào) 有的時(shí)候很有用,嘿嘿
info b 看斷點(diǎn)信息
disable 斷點(diǎn)號(hào) 暫停某個(gè)斷點(diǎn)
enable 斷點(diǎn)號(hào) 啟動(dòng)某個(gè)斷點(diǎn)
delete (斷點(diǎn)號(hào)) 刪除某個(gè)斷點(diǎn),不帶斷點(diǎn)號(hào),全部刪除
x/32uxb 指針 以16進(jìn)制顯示該指針指向的32個(gè)字節(jié)的數(shù)據(jù)

不過(guò)我還是不會(huì)用core調(diào)試,呵呵

上一篇:gdb常用命令

下一篇:覆蓋GNU C庫(kù)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 寿光市| 西乡县| 三河市| 汉中市| 泾源县| 隆化县| 自治县| 都匀市| 抚松县| 基隆市| 云林县| 定州市| 精河县| 永登县| 平昌县| 漳浦县| 盐边县| 尚志市| 麻江县| 万年县| 曲阜市| 高陵县| 萨嘎县| 三河市| 鸡泽县| 松溪县| 玉环县| 安庆市| 司法| 阿鲁科尔沁旗| 新乡县| 呼玛县| 旌德县| 黄大仙区| 津市市| 安泽县| 兴业县| 图们市| 邮箱| 贵德县| 荃湾区|