2013-02-01 58 views
14

在gdb中,我有finish命令輕鬆完成功能框架的執行,通常在調試器中遍歷代碼時,在查看循環的幾次迭代後,我想完成循環並繼續步行它。目前,我通過在循環和continue之後的第一行上設置一個斷點來實現這一點,但是,如果有一個簡單的gdb命令具有相同的效果,但不需要設置斷點,那將非常方便後來被清除。是否有一個gdb命令來完成一個循環結構?

gdb中是否有完成正在執行的當前循環的執行?

+0

'jump'執行變更版本:https://stackoverflow.com/questions/2200556/how-do-i-get-gdb-to-break -out-of-a-loop –

回答

17

是否有一個gdb命令來完成一個循環結構?

環路的最後一行,或until NNN執行until其中NNN是循環的最後一行。

(gdb) help until 
Execute until the program reaches a source line greater than the current 
or a specified location (same args as break command) within the current frame. 

不需要一個破發點被設置以後清除。

臨時斷點自動清除自己:

(gdb) help tbreak 
Set a temporary breakpoint. 
Like "break" except the breakpoint is only temporary, 
so it will be deleted when hit. Equivalent to "break" followed 
by using "enable delete" on the breakpoint number. 
+4

那麼'until'和'advance'之間有什麼區別? – Jester

+1

@Jester「此命令與until類似,但是advance不會跳過遞歸函數調用,並且目標位置不必與當前幀位於同一幀中。」 https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html –

+0

此外,它看起來像「advance」更精確,因爲它只跳轉到實際的代碼位置。 –

4

gdb不知道循環結束的地方,所以它不能這樣做。我認爲你可以做的最好的做法是在循環之後使用advance命令。

相關問題