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

大龍的博客

常用鏈接

統計

最新評論

GDB調試精粹及使用實例(收藏)

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

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

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

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

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

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

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

從斷點繼續運行:countinue 命令
五.斷點的管理

1. 顯示當前gdb的斷點信息:
(gdb) info break
他會以如下的形式顯示所有的斷點信息:
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.刪除指定的某個斷點:
(gdb) delete breakpoint 1
該命令將會刪除編號為1的斷點,如果不帶編號參數,將刪除所有的斷點
(gdb) delete breakpoint
3.禁止使用某個斷點
(gdb) disable breakpoint 1
該命令將禁止斷點 1,同時斷點信息的 (Enb)域將變為 n
4.允許使用某個斷點
(gdb) enable breakpoint 1
該命令將允許斷點 1,同時斷點信息的 (Enb)域將變為 y
5.清除原文件中某一代碼行上的所有斷點
(gdb)clean number
注:number 為原文件的某個代碼行的行號
六.變量的檢查和賦值
l whatis:識別數組或變量的類型
l ptype:比whatis的功能更強,他可以提供一個結構的定義
l set variable:將值賦予變量
l print 除了顯示一個變量的值外,還可以用來賦值

七.單步執行
l next
不進入的單步執行
l step
進入的單步執行
如果已經進入了某函數,而想退出該函數返回到它的調用函數中,可使用命令finish
八.函數的調用
l call name 調用和執行一個函數
(gdb) call gen_and_sork( 1234,1,0 )
(gdb) call printf(“abcd”)
$1=4
l finish 結束執行當前函數,顯示其返回值(如果有的話)

九.機器語言工具
有一組專用的gdb變量可以用來檢查和修改計算機的通用寄存器,gdb提供了目前每一臺計算機中實際使用的4個寄存器的標準名字:
l $pc : 程序計數器
l $fp : 幀指針(當前堆棧幀)
l $sp : 棧指針
l $ps : 處理器狀態

十.信號
gdb通常可以捕捉到發送給它的大多數信號,通過捕捉信號,它就可決定對于正在運行的進程要做些什么工作。例如,按CTRL-C將中斷信號發送給gdb,通常就會終止gdb。但是你或許不想中斷gdb,真正的目的是要中斷gdb正在運行的程序,因此,gdb要抓住該信號并停止它正在運行的程序,這樣就可以執行某些調試操作。

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

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

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

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

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

  在?gdb?提示符處鍵入help,將列出命令的分類,主要的分類有:?
  *?aliases:命令別名?
  *?breakpoints:斷點定義;?
  *?data:數據查看;?
  *?files:指定并查看文件;?
  *?internals:維護命令;?
  *?running:程序執行;?
  *?stack:調用棧查看;?
  *?statu:狀態查看;?
  *?tracepoints:跟蹤程序執行。?
  鍵入?help?后跟命令的分類名,可獲得該類命令的詳細清單。?

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

******gdb?使用范例************************?
—————–?
清單?一個有錯誤的?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?}?
?

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

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   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>
            国产精品久久久久久av福利软件| 久久精品盗摄| 欧美日韩一区三区| 欧美精品日日鲁夜夜添| 欧美99久久| 欧美日韩精品免费| 欧美日韩亚洲在线| 国产精品毛片在线| 国产亚洲精品高潮| 曰本成人黄色| 亚洲精品免费在线| 亚洲欧美第一页| 久久婷婷成人综合色| 欧美va天堂在线| 91久久久国产精品| 亚洲激情成人| 在线视频欧美日韩| 午夜欧美理论片| 美女脱光内衣内裤视频久久影院| 欧美日韩dvd在线观看| 国产欧美日韩视频| 亚洲欧洲在线播放| 午夜在线精品| 欧美激情综合色| 亚洲午夜精品一区二区| 久久国产精品亚洲va麻豆| 美女视频一区免费观看| 国产精品v亚洲精品v日韩精品| 国产一区成人| 一本久久a久久免费精品不卡| 午夜亚洲性色福利视频| 欧美高清日韩| 亚洲欧美日韩精品久久亚洲区| 久久人人爽爽爽人久久久| 欧美午夜精品一区| 亚洲精品久久久久久久久久久久| 欧美亚洲一区三区| 亚洲人精品午夜| 久久精品成人| 国产精品欧美激情| 一区二区欧美激情| 欧美mv日韩mv国产网站| 欧美在线一区二区| 国产精品美女在线| 一区二区日韩欧美| 亚洲国产成人久久| 久久亚洲精品视频| 国外成人在线视频| 久久国产色av| 亚洲欧美www| 欧美日韩在线精品一区二区三区| 影音先锋中文字幕一区| 久久超碰97中文字幕| 亚洲一区二区免费视频| 久久久亚洲综合| 亚洲精品黄色| 久久午夜电影网| 亚洲欧美日韩国产一区二区| 欧美日产一区二区三区在线观看 | 久久大综合网| 亚洲免费精彩视频| 欧美日韩国产探花| 一区二区三区高清在线| 亚洲欧洲日产国产综合网| 欧美激情视频免费观看| 亚洲欧洲三级电影| 亚洲国产日韩一区二区| 欧美高清在线观看| 亚洲茄子视频| 日韩亚洲欧美一区二区三区| 欧美日韩综合一区| 亚洲影院免费观看| 亚洲小说欧美另类社区| 国产日韩欧美夫妻视频在线观看| 欧美专区在线播放| 久久精品国产第一区二区三区最新章节| 国产乱码精品一区二区三区五月婷 | 亚洲国产精品999| 欧美粗暴jizz性欧美20| 99人久久精品视频最新地址| 99精品欧美一区二区蜜桃免费| 欧美日韩国产一区二区| 午夜精品久久久久久久久久久| 亚洲欧美国产视频| 激情亚洲一区二区三区四区| 亚洲成人在线网站| 欧美四级剧情无删版影片| 欧美一区二区三区在线| 久久漫画官网| 亚洲午夜免费福利视频| 欧美一级久久久| 亚洲日本va在线观看| 一区二区高清在线观看| 国内精品久久久久久| 亚洲国产清纯| 国产情侣久久| 亚洲人成人一区二区在线观看 | 亚洲国产成人精品久久久国产成人一区 | 欧美在线三区| 亚洲精品国产精品久久清纯直播| 一本一道久久综合狠狠老精东影业 | 尹人成人综合网| 亚洲毛片一区| 韩日精品视频一区| 99国产精品久久久| 极品少妇一区二区三区| 日韩午夜中文字幕| 国产日韩视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 极品av少妇一区二区| 亚洲精品欧美| 精品69视频一区二区三区| 亚洲免费不卡| 精品999网站| 亚洲综合好骚| 在线视频欧美日韩| 蜜臀av在线播放一区二区三区| 久久激情视频久久| 国产精品红桃| 欧美国产视频一区二区| 国产美女精品在线| 日韩亚洲在线观看| 亚洲国产激情| 欧美一区在线看| 午夜国产精品影院在线观看| 欧美日本韩国一区| 欧美激情乱人伦| 永久域名在线精品| 欧美一级免费视频| 欧美在线中文字幕| 国产精品视频一| 在线一区欧美| 亚洲特级片在线| 欧美日韩免费观看一区三区| 欧美激情视频在线免费观看 欧美视频免费一| 国产目拍亚洲精品99久久精品| 一本色道精品久久一区二区三区 | 国产精品国产自产拍高清av王其| 亚洲精品在线免费| 国产精品99久久久久久有的能看 | 午夜精品福利视频| 亚洲欧美国产va在线影院| 欧美日韩一区精品| 一区二区三区精品视频| 亚洲婷婷综合色高清在线 | 精品动漫3d一区二区三区| 性刺激综合网| 久久久久亚洲综合| 精东粉嫩av免费一区二区三区| 欧美有码在线观看视频| 久久一区亚洲| 亚洲电影av| 欧美激情1区2区3区| 亚洲精品小视频| 亚洲午夜国产一区99re久久| 亚洲精品永久免费| 亚洲精品一线二线三线无人区| 91久久国产综合久久| 欧美ab在线视频| 欧美激情第10页| 99精品热视频| 国产精品高清在线| 亚洲一区中文| 裸体女人亚洲精品一区| 亚洲国产精品成人| 欧美三级在线视频| 欧美一区二区三区四区高清 | 亚洲视频精品在线| 国产精品免费在线| 理论片一区二区在线| 日韩视频第一页| 性色av一区二区三区在线观看| 国外精品视频| 欧美日韩国产综合视频在线| 午夜精品视频在线观看| 欧美大片免费观看在线观看网站推荐| 亚洲美女在线看| 国产欧美日韩在线播放| 久久综合久久美利坚合众国| 日韩一级成人av| 另类综合日韩欧美亚洲| 在线视频精品一| 亚洲福利久久| 国产精品夜夜夜| 欧美h视频在线| 亚洲小说春色综合另类电影| 亚洲第一精品福利| 久久精品免费看| 亚洲尤物视频网| 亚洲精品一区二区三区福利| 国产精品美女在线观看| 美国十次成人| 亚洲欧美一区二区视频| 亚洲国产美女| 久久在线免费| 欧美一区二区视频在线观看2020| 日韩天堂在线观看| 黄色在线一区| 国产精品男人爽免费视频1| 欧美精品二区|