GDBを入力しましたが、help
着信、発信、発信などに関する情報が見つかりませんでした。_start
アセンブラの()にブレークポイントを設定しましたbreak _start
。その後、入力してnext
デバッグが完了しました。終わったからこんな感じですが、_start
そうではありません。中に入る私が望むように。
答え1
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
だから我々はステップを見ることができます入力するサブルーチンですが、next
単一ステップで実行されます。超過サブルーチン。
および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
答え2
「Finish」コマンドを使用してください。これは時々「Step Out」と同じことをします。スタックが実行する操作(通常は関数)を完了したら、次の行に進みます。詳細については、コマンドを参照してください。
答え3
私も同じ問題があってここに来ました。結局、私は私の目的のためにループの「ステップアウト」のようなものを使うことができるたびにループの後ろに別のブレークポイントを設定し、プログラムがループを完了してからブレークポイントまでcontinue
実行することができることを発見しました。これがほとんどの人にとって当然ならば申し訳ありません。しかし、この質問に対する答えを探している人には役立ちます。