2013-02-01 6 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コマンドを使用することだと思います。

関連する問題