GDBにいるときにhelp
と入力しましたが、ステップイン、ステップオーバー、ステップアウトについて何も見つかりませんでした。アセンブリプログラムにブレークポイントを_start
(break _start
)。その後、next
と入力すると、デバッグが終了しました。それが終わったからだと思います_start
およびstep-intoを希望どおりに行いませんでした。
助けることができる誰か?
help running
はいくつかのヒントを提供します:
step
とnext
のインストラクションがあります(またnexti
とstepi
)。
(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.
したがって、step
はintoサブルーチンをステップ実行しますが、next
はoverサブルーチン。
step
とstepi
(およびnext
とnexti
)は、「行」または「命令」の増分で区別されます。
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 にあります。
同じ質問があったのでここに来ました。私は結局、自分の目的のために、ループの「ステップアウト」のようなものをいつでも使用できると思ったので、ループの後に別のブレークポイントを設定して、プログラムcontinue
にループを終了させ、その後のブレークポイント。ほとんどの人にとってそれが明らかな場合は申し訳ありませんが、この質問への回答を探している人にとってはおそらく役に立ちます。
コマンド「finish」を使用します。これは、「ステップアウト」と同じことを行う場合があります。スタックが実行している処理(通常は関数)を終了し、その次の行に移動します。詳細については、コマンドを調べてください。