web-dev-qa-db-ja.com

GDBでステップイン、ステップオーバー、ステップアウトする方法は?

GDBにいるときにhelpと入力しましたが、ステップイン、ステップオーバー、ステップアウトについて何も見つかりませんでした。アセンブリプログラムにブレークポイントを_startbreak _start)。その後、nextと入力すると、デバッグが終了しました。それが終わったからだと思います_startおよびstep-intoを希望どおりに行いませんでした。

助けることができる誰か?

50
Pichi Wuana

help runningはいくつかのヒントを提供します:

stepnextのインストラクションがあります(またnextistepi)。

(gdb) help next
Step program, proceeding through subroutine calls.
Usage: next [N]
Unlike "step", if the current source line calls a subroutine,
this command does not enter the subroutine, but instead steps over
the call, in effect treating it as a single source line.

したがって、stepintoサブルーチンをステップ実行しますが、nextoverサブルーチン。

stepstepi(およびnextnexti)は、「行」または「命令」の増分で区別されます。

step -- Step program until it reaches a different source line
stepi -- Step one instruction exactly

関連はfinishです:

(gdb) help finish
Execute until selected stack frame returns.
Usage: finish
Upon return, the value returned is printed and put in the value history.

さらに役立つ情報は https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html にあります。

46
Stephen Harris

同じ質問があったのでここに来ました。私は結局、自分の目的のために、ループの「ステップアウト」のようなものをいつでも使用できると思ったので、ループの後に別のブレークポイントを設定して、プログラムcontinueにループを終了させ、その後のブレークポイント。ほとんどの人にとってそれが明らかな場合は申し訳ありませんが、この質問への回答を探している人にとってはおそらく役に立ちます。

0
fjahr

コマンド「finish」を使用します。これは、「ステップアウト」と同じことを行う場合があります。スタックが実行している処理(通常は関数)を終了し、その次の行に移動します。詳細については、コマンドを調べてください。

0