久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

GDB使用技巧

 心不留意外塵 2017-04-11

http://www.cnblogs.com/glacierh/p/4592705.html

2015

最近使用GDB比較多,,發(fā)現(xiàn)除了最常用的run,、break、continue,、next等命令的基本用法外,,還有一些非常有用的命令和用法,能讓你更加得心應(yīng)手地使用GDB,,在這里做了一下簡(jiǎn)單的總結(jié),。

1. run

當(dāng)GDB的程序需要帶參數(shù)運(yùn)行時(shí),除了使用set args外,,還可以直接在run(r)后面帶上參數(shù),,如下面兩種方式是等價(jià)的:

 

 

2. set follow-fork-mode

有時(shí)候會(huì)發(fā)現(xiàn)GDB無(wú)法跟蹤到設(shè)置的斷點(diǎn),原因可能是需要調(diào)試的進(jìn)程是daemon進(jìn)程或者fork的子進(jìn)程,,而GDB默認(rèn)是只會(huì)Attach到父進(jìn)程的,。如果要調(diào)試子進(jìn)程,必須在run之前設(shè)置follow-fork-mode,,執(zhí)行命令set follow-fork-mode child后在運(yùn)行程序,,就可以一路跟蹤fork出的子進(jìn)程;相對(duì)地,,如果想停留在當(dāng)前進(jìn)程而不再進(jìn)入子進(jìn)程,,則執(zhí)行set follow-fork-mode parent即可。

3. print

print可以打印出當(dāng)前上下文的變量值,,print非常強(qiáng)大,,除了打印整形等內(nèi)置變量的值,,還可以直接打印出結(jié)構(gòu)體或類對(duì)象的值,如:

 

上圖中的結(jié)構(gòu)體有些復(fù)雜,,打出來(lái)的格式不夠清晰明了,,這時(shí)就要使用set print pretty on,設(shè)置之后,,打印出來(lái)的結(jié)構(gòu)體的可讀性就好了很多:

 

在上面的結(jié)構(gòu)體中,,buffer數(shù)組中的每個(gè)字節(jié)默認(rèn)以字符的方式打印,如果是不可打印字符,,則輸出ASCII碼,,我們可能想直接打印出實(shí)際的二級(jí)制值,print可以設(shè)置輸出數(shù)據(jù)的格式,,如輸出為十六進(jìn)制(x)和十進(jìn)制(d):

 

 

對(duì)于數(shù)組的輸出,,p array打印數(shù)組的所有元素,p array[i]打印下標(biāo)為i的元素,,如果想打印一段范圍的元素,,可以使用p array[i]@len,如:

 

print不僅可以打印變量的值,,還可以直接打印函數(shù)和類成員方法的返回值,,如:

 

 

4. finish

在單步調(diào)試時(shí),除了next,,還可以通過(guò)step進(jìn)入到函數(shù)的內(nèi)部,,如果進(jìn)入到一個(gè)很長(zhǎng)的函數(shù),而又想跳出該函數(shù),,我原來(lái)的做法是在調(diào)用的函數(shù)的下一條語(yǔ)句設(shè)置一個(gè)斷點(diǎn),,其實(shí)最簡(jiǎn)單的方法是使用finish就可以完成當(dāng)前函數(shù)的調(diào)用。同樣通過(guò)finish,,我們可以快速定位到調(diào)用當(dāng)前函數(shù)的代碼,。

5. 條件斷點(diǎn)

設(shè)置斷點(diǎn)是我們?cè)谑褂肎DB時(shí)最常用的調(diào)試手段,有時(shí)候我們希望斷點(diǎn)在特定的條件下生效,,如輸入?yún)?shù)滿足一定的條件或者循環(huán)變量為特定的值,,GDB的條件斷點(diǎn)就是為此而生的,,設(shè)置條件斷點(diǎn)的方法是break if conditon,,如:

break if input>10&&input<20

break if i%100==0

6. 設(shè)置變量值

GDB是如此強(qiáng)大,以至于你可以根據(jù)調(diào)試思路在調(diào)試過(guò)程中動(dòng)態(tài)地設(shè)置變量的值,,如改變變量的值以改變程序的執(zhí)行路徑,,有兩種方式可以設(shè)置:

(1)p v=value

(2)set v=value(如果變量名和GDB內(nèi)置變量沖突,,使用set var v=value)

示例如下:

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多