作為程序員,調試是一項很重要的基本功。調試的技巧和水平,直接決定了解決問題的時間。一般情況下,GDB的基本命令已經足以應付大多數問題了。但是,對于有些問題,還是需要更高級一些的命令。今天給大家介紹GDB功能十分強大的三個調試技巧。checkpoint、condition和ignore。
一,checkpoint
有一些bug,可能很難復現,當好不容易復現一次,且剛剛進入程序的入口時,我們需要珍惜這個來之不易的機會。如果只使用基本命令的話,對于大部分代碼,我們都需要使用step來步進。這樣無疑會耗費大量的時間,因為大部分的代碼可能都沒有問題?墒且坏┎恍⌒氖褂胣ext,結果恰好該語句的函數調用返回出錯。那么對于這次來之不易的機會,我們只得到了部分信息,即確定問題出在該函數,但是哪里出錯還是不清楚。于是還需要再一次的復現bug,時間就這樣浪費了。對于這種問題,是checkpoint大顯身手的時候了。
checkpoint可以看做程序在那一刻的快照,當我們發現錯過了某個調試機會時,可以再次回到checkpoint保存的那個程序狀態。checkpoint的用法很簡單,但是很有用。就是在平時的簡單的bug修正中,也可以加快我們的調試速度——畢竟減少了不必要的重現bug的時間。
二,condition
調試程序時,程序中如果包含循環調用,但想觀察循環中間,此時condition就很有用了,可以根據條件來停止當前的斷點。這個功能很強大,可以在我們設置的條件成立時,自動停止當前的程序,先使用break(或者watch也可以)設置斷點,然后用condition來修改這個斷點的停止(就是斷)的條件。使用方法很簡單,如下:condition <break_number> <expression> 修改當前的斷點停止條件為expression為真值condition <break_number> 清楚斷點號的停止條件,這樣就是一般的斷點了。如,我們想在斷點號為1處,參數args的值為root時才停止(斷點才斷),可以設置如下:condition 1 args="root"。然后如果想清除這個條件,可以這樣condition 1
三,ignore
如果我們不是想根據某一條件表達式來停止,而是想斷點自動忽略前面多少次的停止,從某一次開始才停止,這時ignore就很有用了。ignore break_number count
上面的命令行表示break_number所指定的斷點號將被忽略count次。如:ignore 1 100,表示忽略斷點1的前100次停止。
注:尊重原創文章,轉載請注明出處和鏈接 http://www.dedgn.cn/news-id-10908.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注c語言頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050