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

elva

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=’\000’,location=0x0,next=0x0}
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 0x000028bc in init_random at qsort2.c:155
2 breakpoint keep y 0x0000291c 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
通??梢圆蹲降桨l送給它的大多數信號,通過捕捉信號,它就可決定對于正在運行的進程要做些什么工作。例如,按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?。 nclude
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.然后繼續運行,將看到正確的程序運行結果。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u1/40912/showart_318499.html

posted on 2008-06-18 13:30 葉子 閱讀(977) 評論(0)  編輯 收藏 引用 所屬分類: Unix

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美极品在线播放| 性做久久久久久久久| 欧美极品在线播放| 欧美va天堂| 欧美成人影音| 欧美日产国产成人免费图片| 欧美不卡福利| 欧美日韩岛国| 国产精品夜夜夜| 国产乱码精品一区二区三区不卡| 国产精品视频在线观看| 国产视频欧美视频| 激情欧美亚洲| 日韩午夜激情| 久久国产视频网站| 国产精品国产a级| 日韩视频一区二区三区在线播放| 亚洲精品免费看| 亚洲美洲欧洲综合国产一区| 一级日韩一区在线观看| 亚洲欧美日韩国产成人精品影院| 久久久久高清| 欧美日韩一区二区三区在线观看免| 国产精品久久久久久福利一牛影视| 国产亚洲精品aa| 亚洲欧洲午夜| 欧美在线看片a免费观看| 欧美sm视频| 一区二区三区免费在线观看| 久久久女女女女999久久| 欧美日韩一级片在线观看| 国产欧美一区视频| 99re这里只有精品6| 久久精品人人做人人爽电影蜜月| 亚洲福利在线观看| 欧美一级艳片视频免费观看| 欧美人与性动交cc0o| 国产一区二区三区四区五区美女| av成人免费在线观看| 久久久久久久一区二区三区| 日韩视频中午一区| 蜜臀久久99精品久久久久久9| 国产精品久久夜| 亚洲精品在线观| 蜜桃精品一区二区三区| 亚洲欧美日韩在线综合| 欧美日本中文字幕| 亚洲精品日产精品乱码不卡| 乱码第一页成人| 欧美一区二区三区精品| 欧美性猛交xxxx免费看久久久| 亚洲国产高清高潮精品美女| 久久久久久久性| 午夜精品久久久久久久99樱桃 | 免费看成人av| 亚洲综合色激情五月| 欧美日韩一卡二卡| 99国产精品99久久久久久| 老鸭窝亚洲一区二区三区| 亚洲午夜性刺激影院| 欧美视频四区| 亚洲午夜一区二区| 亚洲美女黄色片| 欧美日本二区| 夜夜爽av福利精品导航| 亚洲国产精品第一区二区| 玖玖玖国产精品| 亚洲国产精品成人va在线观看| 久久久久久久久综合| 欧美一区二区三区免费观看视频 | 亚洲色无码播放| 欧美国产日韩一区二区三区| 亚洲国产国产亚洲一二三| 男人的天堂亚洲| 美女露胸一区二区三区| 91久久久亚洲精品| 亚洲国产综合91精品麻豆| 欧美高清在线一区| 日韩性生活视频| 国产精品99久久久久久久久| 国产精品青草综合久久久久99| 欧美一区高清| 久久夜色精品国产欧美乱极品| 亚洲大片精品永久免费| 亚洲高清免费在线| 欧美日韩伊人| 欧美在线视频二区| 老司机午夜免费精品视频| 日韩亚洲不卡在线| 亚洲欧美欧美一区二区三区| 激情综合色综合久久综合| 欧美电影在线观看完整版| 欧美日韩国产a| 欧美自拍偷拍午夜视频| 久久综合伊人77777麻豆| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美一区在线看| 久久亚洲视频| 宅男精品视频| 欧美在线视频免费播放| 亚洲精品久久视频| 亚洲午夜高清视频| 亚洲高清中文字幕| 亚洲一二三四久久| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲剧情一区二区| 国产亚洲va综合人人澡精品| 亚洲国产va精品久久久不卡综合| 国产精品黄页免费高清在线观看| 免费不卡在线观看| 欧美性一区二区| 欧美国产在线观看| 国产免费观看久久| 亚洲美女中文字幕| 亚洲国产精品成人| 欧美一区二区三区在线| 亚洲调教视频在线观看| 老司机久久99久久精品播放免费| 午夜一级在线看亚洲| 欧美区高清在线| 欧美+亚洲+精品+三区| 国产欧美日韩在线| 亚洲图片自拍偷拍| 亚洲精品一区二区三区四区高清 | 亚洲欧美日本国产专区一区| 亚洲国产婷婷香蕉久久久久久99 | 一区二区自拍| 亚洲免费在线观看| 亚洲视频电影图片偷拍一区| 麻豆精品精品国产自在97香蕉| 欧美在线视频免费播放| 欧美日韩一级大片网址| 亚洲日本精品国产第一区| 在线日韩中文| 久久久999国产| 榴莲视频成人在线观看| 国产在线播放一区二区三区| 午夜精品视频网站| 欧美在线一级视频| 国产色视频一区| 欧美一级免费视频| 久久亚洲精品视频| 一区在线免费| 久久综合狠狠综合久久综青草 | 亚洲国产精品日韩| 老司机aⅴ在线精品导航| 裸体丰满少妇做受久久99精品 | 黄色成人在线| 欧美影院久久久| 久久露脸国产精品| 伊人色综合久久天天五月婷| 久久精品中文字幕免费mv| 久久午夜视频| 亚洲福利电影| 欧美激情黄色片| 艳女tv在线观看国产一区| 亚洲在线视频观看| 国产日本欧美视频| 久久理论片午夜琪琪电影网| 欧美激情片在线观看| 一区二区日韩免费看| 国产精品实拍| 久久久久久亚洲精品中文字幕| 嫩草成人www欧美| 99国产欧美久久久精品| 国产精品久久久一区二区三区| 久久超碰97中文字幕| 亚洲大片精品永久免费| 亚洲视频999| 国产一区二区福利| 欧美电影打屁股sp| 亚洲欧美久久久久一区二区三区| 久久一区中文字幕| 亚洲毛片一区| 国产亚洲电影| 欧美激情麻豆| 亚洲永久网站| 欧美激情1区2区3区| 亚洲天堂免费观看| 影音先锋中文字幕一区二区| 欧美日韩国产一区| 久久精品系列| 一区二区三区四区五区精品| 乱人伦精品视频在线观看| 亚洲一区二三| 亚洲国产影院| 国产欧美 在线欧美| 久久一二三区| 欧美特黄a级高清免费大片a级| 欧美怡红院视频| 日韩视频免费大全中文字幕| 久久久久成人精品| 亚洲一级黄色片| 在线日韩视频| 国产伦一区二区三区色一情| 欧美国产第二页| 久久―日本道色综合久久| 亚洲一区二区av电影| 亚洲国产精品va在线看黑人 | 亚洲激情网站|