GDBにいるときにhelp
と入力しましたが、ステップイン、ステップについて何も見つかりませんでした-オーバーおよびステップアウト。_start
(break _start
)のアセンブリプログラムにブレークポイントを設定しました。その後、next
そしてデバッグを終了しました。_start
を終了し、 <を終了しなかったためだと思います。 em>ステップイン 必要に応じて。
サポートできる人はいますか?
コメント
- GDBのドキュメント全体をお読みください。私が覚えているように、私が最初にそれを学んだとき、彼らはこれについて非常に役に立ちました。残念ながら、私は'数十年間、そのレベルでプログラムをデバッグする必要がなかったため、実際のコマンドが頭の中で入れ替わっているようです。だから、私は'本当に答えを書くことができません。ただし、マニュアルからそれを理解した場合は、ボーナスのために自分の質問に答えることができます。
- @MAP I 'もう一度やり直します。より優れたデバッガー(KDbg)を使用しようとしましたが、 ' Ubuntuでの使用に成功しません。
- gdb は優れたデバッガーです。 Emacsをフロントエンドとして使用することをお勧めします。
- gdbはひどいデバッガーです。それがどれだけ吸うかを処理するための無数の拡張機能があります。ひどい構文、一貫性のないコマンド、不格好なひどいページング、古風なフォーマット、'には16進ダンプがありません。いいえ、'は優れたデバッガーではありません。そうだと思われる場合は、'優れたデバッガーを使用していません。
回答
help running
はいくつかのヒントを提供します:
step
と命令(および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
はステップインします。 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
コメント
- 内容別のソース行に到達するまで?
-
for(i=0;i<10;i++) { printf("%d\n",i); }
は1つのソース行ですが、複数の命令があります。 - ステップアウトする方法はありますか? '実行中のヘルプでそれを見つけることができませんでした。
- "ステップアウト
?
finish
コマンドは、現在のスタックフレームを完了します。これにより、通常、現在のサブルーチンが完了し、呼び出し元に戻ります。 -
finish
またはfin
は、IDEA
またはividのstep-out
です。 = “28c904db61″>
。
回答
同じ質問があったのでここに来ました。最終的に、ループの「ステップアウト」のようなものを使用できるときはいつでも、ループの後に別のブレークポイントを設定して、プログラムcontinue
を終了させることができると思いました。ループし、その後ブレークポイントにぶつかります。ほとんどの人にとってそれが明らかな場合は申し訳ありませんが、この質問への回答を探している人にはおそらく役立つでしょう。
回答
コマンド「finish」を使用します。これは「ステップアウト」と同じことをすることがあります。 「スタックが実行していること(通常は関数)を終了し、その後次の行に進みます。詳細については、コマンドを検索してください。