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

首頁 > 學院 > 開發設計 > 正文

gdb常用命令

2019-11-17 05:14:30
字體:
來源:轉載
供稿:網友

  在linux的c編程中大家經常用gdb調試程序,以下是一些常用的指令
1.break FUNCTION
在某個函數上設置斷點。函數重載時,有可能同時在幾個重載的函數上設置了斷點

break +OFFSET
break -OFFSET
在當前程序運行到的前幾行或后幾行設置斷點

break LINENUM
在行號為LINENUM的行上設置斷點

break FILENAME:LINENUM
在文件名為FILENAME的原文件的第LINENUM行設置斷點

break FILENAME:FUNCTION
在文件名為FILENAME的FUNCTION函數上設置斷點
當你的多個文件中可能含有相同的函數名時必須給出文件名。

break *ADDRESS
在地址ADDRESS上設置斷點,這個命令答應你在沒有調試信息的程序中設置斷點

break
當break命令不包含任何參數時,break命令在當前執行到的程序運行棧中的
下一條指令上設置一個斷點。除了棧底以外,這個命令使程序在一旦從當前
函數返回時停止。相似的命令是finish,但finish并不設置斷點。這一點在
循環語句中很有用。gdb在恢復執行時,至少執行一條指令。

break ... if COND
這個命令設置一個條件斷點,條件由COND指定;在gdb每次執行到此斷點時
COND都被計算當COND的值為非零時,程序在斷點處停止

ignore BNUM COUNT'
設置第BNUM號斷點的被忽略的次數為'COUNT',即斷點BNUM再執行到第COUNT+1
次時程序停止

tbreak ARGS 或者簡寫為 tb
設置斷點為只有效一次。ARGS的使用同break中的參量的使用

hbreak ARGS
設置一個由硬件支持的斷點。這個命令的主要目的是用于對EPROM/ROM程序的調試
因為這條命令可以在不改變代碼的情況下設置斷點。這可以同SPARCLite DSU一起
使用。當程序訪問某些變量和代碼時,DSU將設置“陷井”。注重:你只能一次使用
一個斷點,在新設置斷點時,先刪除原斷點

thbreak ARGS'
設置只有一次作用的硬件支持斷點

rbreak REGEX
在所有滿足表達式REGEX的函數上設置斷點。這個命令在所有相匹配的函數上設置無
條件斷點,當這個命令完成時顯示所有被設置的斷點信息。這個命令設置的斷點和
break命令設置的沒有什么不同。當調試C++程序時這個命令在重載函數上設置斷點時
非常有用。

info breakpoints [N]
info break [N]
info watchpoints [N]
顯示所有的斷點和觀察點的設置表,有下列一些列
*Breakpoint Numbers*----斷點號
*Type*----斷點類型(斷點或是觀察點)
*Disposition*---顯示斷點的狀態
*Enabled or Disabled*---使能或不使能。'y'表示使能,'n'表示不使能。
*Address*----地址,斷點在你程序中的地址(內存地址)
*What*---地址,斷點在你程序中的行號。
假如斷點是條件斷點,此命令還顯示斷點所需要的條件。
帶參數N的'info break'命令只顯示由N指定的斷點的信息。
此命令還顯示斷點的運行信息(被執行過幾次),這個功能在使用'ignore'
命令時很有用。你可以'ignore'一個斷點許多次。使用這個命令可以查看斷點
被執行了多少次。這樣可以更快的找到錯誤。

maint info breakpoints
顯示所有的斷點,無論是你設置的還是gdb自動設置的。
斷點的含義:
breakpoint:斷點,普通斷點
watchpoint:普通觀察點
longjmp:內部斷點,用于處理'longjmp'調用
longjmp resume:內部斷點,設置在'longjmp'調用的目標上
until:'until'命令所使用的內部斷點
finish:finish'命令所使用的內部斷點

2.watch EXPR
為表達式(變量)expr設置一個觀察點。一量表達式值有變化時,馬上停住程序。
這個命令使用EXPR作為表達式設置一個觀察點。GDB將把表達式加入到程序中并監
視程序的運行,當表達式的值被改變時GDB就使程序停止。這個也可以被用在SPARClite
DSU提供的新的自陷工具中。當程序存取某個地址或某條指令時(這個地址在調試寄
存器中指定),DSU將產生自陷。對于數據地址DSU支持'watch'命令,然而硬件斷點寄
存器只能存儲兩個斷點地址,而且斷點的類型必須相同。就是兩個'rwatch'型斷點

或是兩個'awatch'型斷點。

rwatch EXPR'
設置一個觀察點,當EXPR被程序讀時,程序被暫停。

awatch EXPR'
設置一個觀察點,當EXPR被讀出然后被寫入時程序被暫停。

info watchpoints
在多線程的程序中,觀察點的作用很有限,GDB只能觀察在一個線程中的表達式的值
假如你確信表達式只被當前線程所存取,那么使用觀察點才有效。GDB不能注重一個
非當前線程對表達式值的改變。

rwatch <expr>
當表達式(變量)expr被讀時,停住程序。

awatch <expr>
當表達式(變量)的值被讀或被寫時,停住程序。

info watchpoints
列出當前所設置了的所有觀察點。


3.catch EXCEPTIONS
使用這個命令在一個被激活的異常處理句柄中設置斷點。EXCEPTIONS是一個你要抓住
的異常。你一樣可以使用'info catch'命令來列出活躍的異常處理句柄。

GDB中對于異常處理由以下情況不能處理:
* 假如你使用一個交互的函數,當函數運行結束時,GDB將象普通情況一樣把控制返
回給你。假如在調用中發生了異常,這個函數將繼續運行直到碰到一個斷點,一個信號
或是退出運行。
* 你不能手工產生一個異常( 即異常只能由程序運行中產生 )
* 你不能手工設置一個異常處理句柄。
有時'catch'命令不一定是調試異常處理的最好的方法。假如你需要知道異常產生的
確切位置,最好在異常處理句柄被調用以前設置一個斷點,這樣你可以檢查棧的內容。
假如你在一個異常處理句柄上設置斷點,那么你就不輕易知道異常發生的位置和原因。
要僅僅只在異常處理句柄被喚醒之前設置斷點,你必須了解一些語言的實現細節。

3.cont N
第N次經過該斷點時才停止程序運行

4.enable 斷點編號
恢復暫時失活的斷點,要恢復多個編號的斷點,可用空格將編號分開

5.disable 斷點編號
使斷點失效,但是斷點還在

6.delete 斷點編號或者表達式
刪除某斷點

7.clear 斷點所在行號
清除某斷點

8.查看斷點列表
info break

9.watch counter>15
當counter>15的時候程序終止

10.當程序崩潰的時候linux會生成一個core文件,可以用
gdb a.out core
where
查看導致崩潰的原因

11.continue
恢復程序運行,直到碰到下一個斷點

12.run
程序開始運行,直到碰到斷點

13.step
執行一行代碼

14.next
和s不同的是他不跟蹤到代碼的內部,一步一步執行代碼

15.直接回車為執行上一個命令

16.print 變量
打印某一變量的值

17.display 變量
每次運行到斷點就顯示變量的值,用于觀察變量的變化

18.set 變量=
在程序執行中重新設置某變量的值

19.printf "%2.2s/n",(char*)0x120100fa0
結果打印出:He

20. 設置gdb的列寬,以下為將屏幕設置為70列
set width 70

21. info args 列出你程序所接受的命令行參數
info registers列出寄存器的狀態
info breakpoint列出在程序中設的斷點
要獲得具體的關于info的信息用help info.

22. set
這個命令用來為你的程序設置一個運行環境(使用一個表達式)。
set prompt $把gdb的提示符設為$.
set args 可指定運行時參數。(如:set args 10 20 30 40 50)
show args 命令可以查看設置好的運行參數。

23. show
show命令用來顯示gdb自身的狀態。
使用'set'命令可以改變絕大多數由'show'顯示的信息
使用show radix命令來顯示基數
用不帶任何參變量的'set'命令可以顯示所有可以設置的變量的值
有三個變量是不可以用'set'命令來設置的:
show version顯示gdb的版本號
show copying顯示版權信息
show warranty顯示擔保信息

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栖霞市| 莱西市| 闽侯县| 浮山县| 德庆县| 莱西市| 碌曲县| 赤壁市| 合水县| 明光市| 嘉义市| 凤城市| 乌海市| 新密市| 武川县| 五家渠市| 龙川县| 天峨县| 民权县| 上蔡县| 盖州市| 通江县| 抚松县| 德江县| 巴林右旗| 洪雅县| 苗栗市| 阳新县| 宜昌市| 兖州市| 碌曲县| 开江县| 灵川县| 晴隆县| 南陵县| 武安市| 罗山县| 治县。| 武功县| 曲阜市| 连云港市|