GDBにいるときにhelpと入力しましたが、ステップイン、ステップについて何も見つかりませんでした-オーバーおよびステップアウト。_startbreak _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(および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

コメント

  • 内容別のソース行に到達するまで
  • for(i=0;i<10;i++) { printf("%d\n",i); }は1つのソース行ですが、複数の命令があります。
  • ステップアウトする方法はありますか? '実行中のヘルプでそれを見つけることができませんでした。
  • "ステップアウト

finishコマンドは、現在のスタックフレームを完了します。これにより、通常、現在のサブルーチンが完了し、呼び出し元に戻ります。

  • finishまたはfinは、IDEAまたはividのstep-outです。 = “28c904db61″>
  • 回答

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

    回答

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

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です