教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

C++培訓(xùn)之gdb斷點調(diào)試的三個實用技巧

更新時間:2016年08月26日16時11分 來源:傳智播客C++培訓(xùn)學(xué)院 瀏覽次數(shù):

作為程序員,調(diào)試是一項很重要的基本功。調(diào)試的技巧和水平,直接決定了解決問題的時間。一般情況下,GDB的基本命令已經(jīng)足以應(yīng)付大多數(shù)問題了。但是,對于有些問題,還是需要更高級一些的命令。
今天給大家介紹GDB功能十分強(qiáng)大的三個調(diào)試技巧。checkpoint、condition和ignore。
一,checkpoint
有一些bug,可能很難復(fù)現(xiàn),當(dāng)好不容易復(fù)現(xiàn)一次,且剛剛進(jìn)入程序的入口時,我們需要珍惜這個來之不易的機(jī)會。如果只使用基本命令的話,對于大部分代碼,我們都需要使用step來步進(jìn)。這樣無疑會耗費大量的時間,因為大部分的代碼可能都沒有問題??墒且坏┎恍⌒氖褂胣ext,結(jié)果恰好該語句的函數(shù)調(diào)用返回出錯。那么對于這次來之不易的機(jī)會,我們只得到了部分信息,即確定問題出在該函數(shù),但是哪里出錯還是不清楚。于是還需要再一次的復(fù)現(xiàn)bug,時間就這樣浪費了。對于這種問題,是checkpoint大顯身手的時候了。
checkpoint可以看做程序在那一刻的快照,當(dāng)我們發(fā)現(xiàn)錯過了某個調(diào)試機(jī)會時,可以再次回到checkpoint保存的那個程序狀態(tài)。
checkpoint的用法很簡單,但是很有用。就是在平時的簡單的bug修正中,也可以加快我們的調(diào)試速度——畢竟減少了不必要的重現(xiàn)bug的時間。
二,condition
調(diào)試程序時,程序中如果包含循環(huán)調(diào)用,但想觀察循環(huán)中間,此時condition就很有用了,可以根據(jù)條件來停止當(dāng)前的斷點。
這個功能很強(qiáng)大,可以在我們設(shè)置的條件成立時,自動停止當(dāng)前的程序,先使用break(或者watch也可以)設(shè)置斷點,然后用condition來修改這個斷點的停止(就是斷)的條件。使用方法很簡單,如下:
 condition <break_number> <expression> 修改當(dāng)前的斷點停止條件為expression為真值condition <break_number> 清楚斷點號的停止條件,這樣就是一般的斷點了。
如,我們想在斷點號為1處,參數(shù)args的值為root時才停止(斷點才斷),可以設(shè)置如下:condition 1 args="root"。然后如果想清除這個條件,可以這樣condition 1
三,ignore
如果我們不是想根據(jù)某一條件表達(dá)式來停止,而是想斷點自動忽略前面多少次的停止,從某一次開始才停止,這時ignore就很有用了。
ignore break_number count
上面的命令行表示break_number所指定的斷點號將被忽略count次。如:
ignore 1 100,表示忽略斷點1的前100次停止
本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://oisangadgets.com/c/ 
0 分享到:
和我們在線交談!