青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統(tǒng)計(jì)

最新評(píng)論

GDB調(diào)試精粹及使用實(shí)例(收藏)

一:列文件清單
1. List
(gdb) list line1,line2

二:執(zhí)行程序
要想運(yùn)行準(zhǔn)備調(diào)試的程序,可使用run命令,在它后面可以跟隨發(fā)給該程序的任何參數(shù),包括標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出說(shuō)明符()和外殼通配符(*、?、[、])在內(nèi)。
如果你使用不帶參數(shù)的run命令,gdb就再次使用你給予前一條run命令的參數(shù),這是很有用的。
利用set args 命令就可以修改發(fā)送給程序的參數(shù),而使用show args 命令就可以查看其缺省參數(shù)的列表。
gdb)set args –b –x
(gdb) show args
backtrace命令為堆棧提供向后跟蹤功能。
Backtrace 命令產(chǎn)生一張列表,包含著從最近的過(guò)程開(kāi)始的所以有效過(guò)程和調(diào)用這些過(guò)程的參數(shù)。

三:顯示數(shù)據(jù)
利用print 命令可以檢查各個(gè)變量的值。
(gdb) print p (p為變量名)
whatis 命令可以顯示某個(gè)變量的類(lèi)型
(gdb) whatis p
type = int *

print 是gdb的一個(gè)功能很強(qiáng)的命令,利用它可以顯示被調(diào)試的語(yǔ)言中任何有效的表達(dá)式。表達(dá)式除了包含你程序中的變量外,還可以包含以下內(nèi)容:
l 對(duì)程序中函數(shù)的調(diào)用
(gdb) print find_entry(1,0)
l 數(shù)據(jù)結(jié)構(gòu)和其他復(fù)雜對(duì)象
(gdb) print *table_start
$8={e=reference=’00’,location=0×0,next=0×0}
l 值的歷史成分
(gdb)print $1 ($1為歷史記錄變量,在以后可以直接引用 $1 的值)
l 人為數(shù)組
人為數(shù)組提供了一種去顯示存儲(chǔ)器塊(數(shù)組節(jié)或動(dòng)態(tài)分配的存儲(chǔ)區(qū))內(nèi)容的方法。早期的調(diào)試程序沒(méi)有很好的方法將任意的指針換成一個(gè)數(shù)組。就像對(duì)待參數(shù)一樣,讓我們查看內(nèi)存中在變量h后面的10個(gè)整數(shù),一個(gè)動(dòng)態(tài)數(shù)組的語(yǔ)法如下所示:
base@length
因此,要想顯示在h后面的10個(gè)元素,可以使用h@10:
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)

四:斷點(diǎn)(breakpoint)
break命令(可以簡(jiǎn)寫(xiě)為b)可以用來(lái)在調(diào)試的程序中設(shè)置斷點(diǎn),該命令有如下四種形式:
l break line-number 使程序恰好在執(zhí)行給定行之前停止。
l break function-name 使程序恰好在進(jìn)入指定的函數(shù)之前停止。
l break line-or-function if condition 如果condition(條件)是真,程序到達(dá)指定行或函數(shù)時(shí)停止。
l break routine-name 在指定例程的入口處設(shè)置斷點(diǎn)

如果該程序是由很多原文件構(gòu)成的,你可以在各個(gè)原文件中設(shè)置斷點(diǎn),而不是在當(dāng)前的原文件中設(shè)置斷點(diǎn),其方法如下:
(gdb) break filename:line-number
(gdb) break filename:function-name

要想設(shè)置一個(gè)條件斷點(diǎn),可以利用break if命令,如下所示:
(gdb) break line-or-function if expr
例:
(gdb) break 46 if testsize==100

從斷點(diǎn)繼續(xù)運(yùn)行:countinue 命令
五.?dāng)帱c(diǎn)的管理

1. 顯示當(dāng)前gdb的斷點(diǎn)信息:
(gdb) info break
他會(huì)以如下的形式顯示所有的斷點(diǎn)信息:
Num Type Disp Enb Address What
1 breakpoint keep y 0×000028bc in init_random at qsort2.c:155
2 breakpoint keep y 0×0000291c in init_organ at qsort2.c:168
(gdb)
2.刪除指定的某個(gè)斷點(diǎn):
(gdb) delete breakpoint 1
該命令將會(huì)刪除編號(hào)為1的斷點(diǎn),如果不帶編號(hào)參數(shù),將刪除所有的斷點(diǎn)
(gdb) delete breakpoint
3.禁止使用某個(gè)斷點(diǎn)
(gdb) disable breakpoint 1
該命令將禁止斷點(diǎn) 1,同時(shí)斷點(diǎn)信息的 (Enb)域?qū)⒆優(yōu)?n
4.允許使用某個(gè)斷點(diǎn)
(gdb) enable breakpoint 1
該命令將允許斷點(diǎn) 1,同時(shí)斷點(diǎn)信息的 (Enb)域?qū)⒆優(yōu)?y
5.清除原文件中某一代碼行上的所有斷點(diǎn)
(gdb)clean number
注:number 為原文件的某個(gè)代碼行的行號(hào)
六.變量的檢查和賦值
l whatis:識(shí)別數(shù)組或變量的類(lèi)型
l ptype:比whatis的功能更強(qiáng),他可以提供一個(gè)結(jié)構(gòu)的定義
l set variable:將值賦予變量
l print 除了顯示一個(gè)變量的值外,還可以用來(lái)賦值

七.單步執(zhí)行
l next
不進(jìn)入的單步執(zhí)行
l step
進(jìn)入的單步執(zhí)行
如果已經(jīng)進(jìn)入了某函數(shù),而想退出該函數(shù)返回到它的調(diào)用函數(shù)中,可使用命令finish
八.函數(shù)的調(diào)用
l call name 調(diào)用和執(zhí)行一個(gè)函數(shù)
(gdb) call gen_and_sork( 1234,1,0 )
(gdb) call printf(“abcd”)
$1=4
l finish 結(jié)束執(zhí)行當(dāng)前函數(shù),顯示其返回值(如果有的話(huà))

九.機(jī)器語(yǔ)言工具
有一組專(zhuān)用的gdb變量可以用來(lái)檢查和修改計(jì)算機(jī)的通用寄存器,gdb提供了目前每一臺(tái)計(jì)算機(jī)中實(shí)際使用的4個(gè)寄存器的標(biāo)準(zhǔn)名字:
l $pc : 程序計(jì)數(shù)器
l $fp : 幀指針(當(dāng)前堆棧幀)
l $sp : 棧指針
l $ps : 處理器狀態(tài)

十.信號(hào)
gdb通常可以捕捉到發(fā)送給它的大多數(shù)信號(hào),通過(guò)捕捉信號(hào),它就可決定對(duì)于正在運(yùn)行的進(jìn)程要做些什么工作。例如,按CTRL-C將中斷信號(hào)發(fā)送給gdb,通常就會(huì)終止gdb。但是你或許不想中斷gdb,真正的目的是要中斷gdb正在運(yùn)行的程序,因此,gdb要抓住該信號(hào)并停止它正在運(yùn)行的程序,這樣就可以執(zhí)行某些調(diào)試操作。

Handle命令可控制信號(hào)的處理,他有兩個(gè)參數(shù),一個(gè)是信號(hào)名,另一個(gè)是接受到信號(hào)時(shí)該作什么。幾種可能的參數(shù)是:
l nostop 接收到信號(hào)時(shí),不要將它發(fā)送給程序,也不要停止程序。
l stop 接受到信號(hào)時(shí)停止程序的執(zhí)行,從而允許程序調(diào)試;顯示一條表示已接受到信號(hào)的消息(禁止使用消息除外)
l print 接受到信號(hào)時(shí)顯示一條消息
l noprint 接受到信號(hào)時(shí)不要顯示消息(而且隱含著不停止程序運(yùn)行)
l pass 將信號(hào)發(fā)送給程序,從而允許你的程序去處理它、停止運(yùn)行或采取別的動(dòng)作。
l nopass 停止程序運(yùn)行,但不要將信號(hào)發(fā)送給程序。
例如,假定你截獲SIGPIPE信號(hào),以防止正在調(diào)試的程序接受到該信號(hào),而且只要該信號(hào)一到達(dá),就要求該程序停止,并通知你。要完成這一任務(wù),可利用如下命令:
(gdb) handle SIGPIPE stop print
請(qǐng)注意,UNIX的信號(hào)名總是采用大寫(xiě)字母!你可以用信號(hào)編號(hào)替代信號(hào)名
如果你的程序要執(zhí)行任何信號(hào)處理操作,就需要能夠測(cè)試其信號(hào)處理程序,為此,就需要一種能將信號(hào)發(fā)送給程序的簡(jiǎn)便方法,這就是signal命令的任務(wù)。該 命令的參數(shù)是一個(gè)數(shù)字或者一個(gè)名字,如SIGINT。假定你的程序已將一個(gè)專(zhuān)用的SIGINT(鍵盤(pán)輸入,或CTRL-C;信號(hào)2)信號(hào)處理程序設(shè)置成采 取某個(gè)清理動(dòng)作,要想測(cè)試該信號(hào)處理程序,你可以設(shè)置一個(gè)斷點(diǎn)并使用如下命令:
gdb) signal 2
continuing with signal SIGINT(2)
該程序繼續(xù)執(zhí)行,但是立即傳輸該信號(hào),而且處理程序開(kāi)始運(yùn)行.

十一. 原文件的搜索
search text:該命令可顯示在當(dāng)前文件中包含text串的下一行。
Reverse-search text:該命令可以顯示包含text 的前一行。

十二.UNIX接口
shell 命令可啟動(dòng)UNIX外殼,CTRL-D退出外殼,返回到 gdb.

十三.命令的歷史
為了允許使用歷史命令,可使用 set history expansion on 命令
(gdb) set history expansion on

小結(jié):常用的gdb命令
backtrace 顯示程序中的當(dāng)前位置和表示如何到達(dá)當(dāng)前位置的棧跟蹤(同義詞:where)
breakpoint 在程序中設(shè)置一個(gè)斷點(diǎn)
cd 改變當(dāng)前工作目錄
clear 刪除剛才停止處的斷點(diǎn)
commands 命中斷點(diǎn)時(shí),列出將要執(zhí)行的命令
continue 從斷點(diǎn)開(kāi)始繼續(xù)執(zhí)行
delete 刪除一個(gè)斷點(diǎn)或監(jiān)測(cè)點(diǎn);也可與其他命令一起使用
display 程序停止時(shí)顯示變量和表達(dá)時(shí)
down 下移棧幀,使得另一個(gè)函數(shù)成為當(dāng)前函數(shù)
frame 選擇下一條continue命令的幀
info 顯示與該程序有關(guān)的各種信息
jump 在源程序中的另一點(diǎn)開(kāi)始運(yùn)行
kill 異常終止在gdb 控制下運(yùn)行的程序
list 列出相應(yīng)于正在執(zhí)行的程序的原文件內(nèi)容
next 執(zhí)行下一個(gè)源程序行,從而執(zhí)行其整體中的一個(gè)函數(shù)
print 顯示變量或表達(dá)式的值
pwd 顯示當(dāng)前工作目錄
pype 顯示一個(gè)數(shù)據(jù)結(jié)構(gòu)(如一個(gè)結(jié)構(gòu)或C++類(lèi))的內(nèi)容
quit 退出gdb
reverse-search 在源文件中反向搜索正規(guī)表達(dá)式
run 執(zhí)行該程序
search 在源文件中搜索正規(guī)表達(dá)式
set variable 給變量賦值
signal 將一個(gè)信號(hào)發(fā)送到正在運(yùn)行的進(jìn)程
step 執(zhí)行下一個(gè)源程序行,必要時(shí)進(jìn)入下一個(gè)函數(shù)
undisplay display命令的反命令,不要顯示表達(dá)式
until 結(jié)束當(dāng)前循環(huán)
up 上移棧幀,使另一函數(shù)成為當(dāng)前函數(shù)
watch 在程序中設(shè)置一個(gè)監(jiān)測(cè)點(diǎn)(即數(shù)據(jù)斷點(diǎn))
whatis 顯示變量或函數(shù)類(lèi)型
****************************************************
 GNU的調(diào)試器稱(chēng)為gdb,該程序是一個(gè)交互式工具,工作在字符模式。在?X?Window?系統(tǒng)中,有一個(gè)gdb的前端圖形工具,稱(chēng)為xxgdb。gdb?是功能強(qiáng)大的調(diào)試程序,可完成如下的調(diào)試任務(wù):?
  *?設(shè)置斷點(diǎn);?
  *?監(jiān)視程序變量的值;?
  *?程序的單步執(zhí)行;?
  *?修改變量的值。?
  在可以使用?gdb?調(diào)試程序之前,必須使用?-g?選項(xiàng)編譯源文件。可在?makefile?中如下定義?CFLAGS?變量:?
  ?CFLAGS?=?-g?
  ?運(yùn)行?gdb?調(diào)試程序時(shí)通常使用如下的命令:?
  ?gdb?progname?

  在?gdb?提示符處鍵入help,將列出命令的分類(lèi),主要的分類(lèi)有:?
  *?aliases:命令別名?
  *?breakpoints:斷點(diǎn)定義;?
  *?data:數(shù)據(jù)查看;?
  *?files:指定并查看文件;?
  *?internals:維護(hù)命令;?
  *?running:程序執(zhí)行;?
  *?stack:調(diào)用棧查看;?
  *?statu:狀態(tài)查看;?
  *?tracepoints:跟蹤程序執(zhí)行。?
  鍵入?help?后跟命令的分類(lèi)名,可獲得該類(lèi)命令的詳細(xì)清單。?

gdb?的常用命令?
命令?解釋?
  break?NUM?在指定的行上設(shè)置斷點(diǎn)。?
  bt?顯示所有的調(diào)用棧幀。該命令可用來(lái)顯示函數(shù)的調(diào)用順序。?
  clear?刪除設(shè)置在特定源文件、特定行上的斷點(diǎn)。其用法為clear?FILENAME:NUM?
  continue?繼續(xù)執(zhí)行正在調(diào)試的程序。該命令用在程序由于處理信號(hào)或斷點(diǎn)而?導(dǎo)致停止運(yùn)行時(shí)。?
  display?EXPR?每次程序停止后顯示表達(dá)式的值。表達(dá)式由程序定義的變量組成。?
  file?FILE?裝載指定的可執(zhí)行文件進(jìn)行調(diào)試。?
  help?NAME?顯示指定命令的幫助信息。?
  info?break?顯示當(dāng)前斷點(diǎn)清單,包括到達(dá)斷點(diǎn)處的次數(shù)等。?
  info?files?顯示被調(diào)試文件的詳細(xì)信息。?
  info?func?顯示所有的函數(shù)名稱(chēng)。?
  info?local?顯示當(dāng)函數(shù)中的局部變量信息。?
  info?prog?顯示被調(diào)試程序的執(zhí)行狀態(tài)。?
  info?var?顯示所有的全局和靜態(tài)變量名稱(chēng)。?
  kill?終止正被調(diào)試的程序。?
  list?顯示源代碼段。?
  make?在不退出?gdb?的情況下運(yùn)行?make?工具。?
  next?在不單步執(zhí)行進(jìn)入其他函數(shù)的情況下,向前執(zhí)行一行源代碼。?
  print?EXPR?顯示表達(dá)式?EXPR?的值。?

******gdb?使用范例************************?
—————–?
清單?一個(gè)有錯(cuò)誤的?C?源程序?bugging.c?
代碼:?

—————–?
1 #include??
2?
3 static?char?buff?[256];?
4 static?char*?string;?
5 int?main?()?
6 {?
7   printf?(”Please?input?a?string:?”);?
8   gets?(string);  ?
9  ?printf?(”\nYour?string?is:?%s\n”,?string);?
10?}?
?

—————–?
 ?上面這個(gè)程序非常簡(jiǎn)單,其目的是接受用戶(hù)的輸入,然后將用戶(hù)的輸入打印出來(lái)。該程序使用了一個(gè)未經(jīng)過(guò)初始化的字符串地址? string,因此,編譯并運(yùn)行之后,將出現(xiàn)?Segment?Fault?錯(cuò)誤:?
$?gcc?-o?bugging?-g?bugging.c?
$?./bugging?
Please?input?a?string:?asfd?
Segmentation?fault?(core?dumped)?
為了查找該程序中出現(xiàn)的問(wèn)題,我們利用?gdb,并按如下的步驟進(jìn)行:?
1.運(yùn)行?gdb?bugging?命令,裝入?bugging?可執(zhí)行文件;?
2.執(zhí)行裝入的?bugging?命令?run;?
3.使用?where?命令查看程序出錯(cuò)的地方;?
4.利用?list?命令查看調(diào)用?gets?函數(shù)附近的代碼;?
5.唯一能夠?qū)е?gets?函數(shù)出錯(cuò)的因素就是變量?string。用print命令查看?string?的值;?
6.在?gdb?中,我們可以直接修改變量的值,只要將?string?取一個(gè)合法的指針值就可以了,為此,我們?cè)诘?行處設(shè)置斷點(diǎn)?break?8;?
7.程序重新運(yùn)行到第?8行處停止,這時(shí),我們可以用?set?variable?命令修改?string?的取值;?
8.然后繼續(xù)運(yùn)行,將看到正確的程序運(yùn)行結(jié)果。

posted on 2007-10-17 02:11 大龍 閱讀(534) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久乐国产精品| 免费一级欧美片在线播放| 国产精品毛片a∨一区二区三区| 一区二区三区精品国产| 欧美亚洲三区| 久久青青草原一区二区| aa亚洲婷婷| 狠狠色狠狠色综合人人| 欧美日韩亚洲一区二区| 欧美成年网站| 麻豆成人av| 午夜亚洲激情| 亚洲午夜免费福利视频| 亚洲国产91精品在线观看| 久久影音先锋| 欧美激情第4页| 亚洲第一精品福利| 久久久视频精品| 欧美激情偷拍| 日韩亚洲一区在线播放| 亚洲人体影院| 中文国产成人精品| 欧美精品一区二区视频| 国产精品九九久久久久久久| 国产精品久久国产精麻豆99网站| 欧美经典一区二区三区| 久久婷婷国产综合精品青草| 久久亚洲精品网站| 欧美乱大交xxxxx| 欧美日韩中文精品| 久久人人97超碰精品888| 欧美黄色一级视频| 亚洲男人av电影| 久久久久久久综合色一本| 欧美承认网站| 国产真实久久| 亚洲欧美卡通另类91av| 久久这里有精品15一区二区三区| 欧美激情第9页| 日韩亚洲视频在线| 久久米奇亚洲| 国产欧美日韩视频一区二区三区 | 亚洲国产精品一区在线观看不卡| 亚洲高清免费| 久久久久久亚洲精品中文字幕| 欧美成人资源| 久久av老司机精品网站导航| 欧美人与性禽动交情品| 国产一区二区精品久久91| 美女日韩在线中文字幕| 欧美一区二区啪啪| 国产精品高清网站| 亚洲精品久久嫩草网站秘色| 久久―日本道色综合久久| 亚洲色图在线视频| 国产欧美日韩另类视频免费观看| 久久xxxx精品视频| 午夜精品久久久久久99热软件 | 国产精品劲爆视频| 宅男噜噜噜66一区二区66| 欧美激情精品| 久久精品国产99精品国产亚洲性色 | 久久人人97超碰精品888| 国产精品亚洲视频| 日韩一区二区精品| 欧美成年网站| 久久综合图片| 伊人久久大香线| 久久精品人人做人人爽| 亚洲直播在线一区| 国产精品无码永久免费888| 在线亚洲精品| 99视频国产精品免费观看| 欧美激情免费观看| 9色国产精品| 日韩视频在线一区二区三区| 欧美女同视频| 亚洲天堂av综合网| 日韩视频免费观看| 欧美视频在线观看一区| 99视频+国产日韩欧美| 亚洲精品色婷婷福利天堂| 欧美日韩一区二区高清| 亚洲欧美成人综合| 亚洲欧美中文另类| 国内精品久久久久久久影视麻豆| 久久精品国产免费观看| 久久精品免视看| 亚洲国产日日夜夜| 日韩视频欧美视频| 国产精品亚洲а∨天堂免在线| 性做久久久久久免费观看欧美| 午夜精品久久久久久久99水蜜桃| 国产午夜精品久久久久久免费视| 久久夜色精品国产噜噜av| 美日韩免费视频| 亚洲私人黄色宅男| 久久精品中文字幕一区| 亚洲精品久久久久久久久久久久久| 亚洲欧洲视频| 国产精品系列在线播放| 欧美99久久| 国产精品欧美风情| 欧美成人影音| 国产欧美一区二区白浆黑人| 亚洲成人在线网站| 国产毛片一区| 亚洲精品一区二区三区99| 狠狠色狠狠色综合系列| 99这里只有久久精品视频| 韩国精品久久久999| 99国产精品久久久久老师| 激情成人综合| 亚洲自拍偷拍福利| 一本大道久久a久久精二百| 久久精品99久久香蕉国产色戒 | 欧美日韩综合视频| 久久嫩草精品久久久久| 国产日韩欧美黄色| 妖精视频成人观看www| 一本色道久久综合亚洲二区三区| 欧美日韩一级大片网址| 亚洲成人在线视频播放 | 亚洲视频一区在线| 正在播放欧美一区| 亚洲精品小视频| 久久综合网色—综合色88| 欧美在线短视频| 久久丁香综合五月国产三级网站| 亚洲欧美国内爽妇网| 日韩一区二区精品葵司在线| 日韩视频在线一区| 亚洲午夜激情| 久久精品二区亚洲w码| 亚洲欧美成人一区二区在线电影| 亚洲精品日韩综合观看成人91| 国产欧美日韩精品一区| 亚洲高清在线| 欧美一区=区| 久久不射网站| 香蕉国产精品偷在线观看不卡 | 欧美在线关看| 国产精品久久久亚洲一区| 欧美三级视频在线| 国产综合欧美| 一本大道久久精品懂色aⅴ| 午夜精品成人在线| 亚洲大胆女人| 欧美国产日韩一区二区在线观看 | 亚洲一区在线看| 亚洲国产高清aⅴ视频| 夜夜嗨网站十八久久| 日韩视频免费在线观看| 欧美在线免费观看| 欧美亚洲第一区| 亚洲精品一线二线三线无人区| 亚洲黄一区二区三区| 亚洲国产导航| 毛片一区二区三区| 久久精品国产99国产精品| 国产在线欧美日韩| 欧美一区久久| 国产精品99久久久久久宅男| 国产精品高潮视频| 亚洲自拍偷拍色片视频| 另类尿喷潮videofree| 亚洲人在线视频| 欧美成人在线免费观看| 一区二区三区自拍| 亚洲美女黄色| 欧美大片一区二区| 亚洲伦理网站| 一本色道久久综合| 亚洲第一搞黄网站| 亚洲第一久久影院| 欧美激情在线观看| 亚欧成人精品| 亚洲欧洲一区二区三区在线观看 | 亚洲欧美国产一区二区三区| 国产精品综合网站| 欧美伊人久久| 免费欧美电影| 久热精品视频在线免费观看| 欧美一区二区成人6969| 亚洲精品中文字幕在线| 一本一本久久| 亚洲毛片播放| 午夜亚洲性色福利视频| 国产一区二区成人| 中日韩午夜理伦电影免费| 国产精品午夜国产小视频| 欧美一二三区精品| 亚洲欧美日韩国产另类专区| 亚洲国产视频一区二区| 欧美日韩综合另类| 久久精品免费看| 欧美精品电影| 久久久久九九九九| 韩国成人精品a∨在线观看| 亚洲一区二区日本|