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


42

helpGDBにいる間に入力しましたが、ステップイン、ステップオーバー、ステップアウトについて何も見つかりませんでした。_startbreak _start)のアセンブリプログラムにブレークポイントを配置しました。その後、入力nextしてデバッグを終了しました。思ったとおりに終了し_startステップインしなかったからだと思います。

助けてくれる人はいますか?


GDBのドキュメントをすべて読んでください。私が覚えているように、彼らは私が最初にそれを学んでいたとき、これについて非常に役に立ちました。残念ながら、数十年にわたってそのレベルのプログラムをデバッグする必要はなかったので、実際のコマンドは私の脳で入れ替わったようです。だから、私は本当に答えを書くことができません。しかし、マニュアルからそれを理解した場合、ボーナスのためにあなた自身の質問に答えることができます。
MAP

@MAP再試行します。より良いデバッガー(KDbg)を使用しようとしましたが、Ubuntuでは使用できません
ピチウアナ

回答:


38

help running ヒントを提供します:

あるstepnextinstuctions(とも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(および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にあります


別のソース行に到達するまではどういう意味ですか?
ピチウアナ

1
for(i=0;i<10;i++) { printf("%d\n",i); }1つのソース行ですが、複数の命令です。
スティーブンハリス

3
ステップアウトする方法はありますか?実行中のヘルプでそれを見つけることができませんでした。
-nukeguy

1
「脱退」とはどういう意味ですか?このfinishコマンドは現在のスタックフレームを完了します。通常、現在のサブルーチンは完了し、呼び出し元に戻ります。
スティーブンハリス

@PichiWuana gdbは、ソースコードの次の行を表す最初の命令に到達するまで、必要な数のアセンブリ命令をステップ実行します
-U007D

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.