9

GDB を使用してコードのすべての行にブレークポイントを設定する方法はありますか? 明らかに、すべての行をヒットしたくないb *addrので、これを行う簡単な方法があるかどうか疑問に思っています。

編集 他の人が作成したバイナリを実行していて、ソース コードにアクセスできないことに注意してください。残念ながら、そのバイナリは -g フラグを付けてコンパイルされていません。したがって、コード内の各行を 1 ステップだけ実行することはできません。

さらに編集 Jason が以下で指摘しているように、単に(step) または(next)とは対照的に、 siorを使用している限り、実際にコードを 1 ステップ実行できます。または、ソース コードが -g を指定してコンパイルされていても、-g を指定せずにコンパイルされたバイナリのようなすべてのアセンブリ命令をステップ実行するのではなく、ソース コードの行をステップ実行する場合は問題なく動作します。nisnnsnisi

4

3 に答える 3

7

si( ) を使用stepiして、コードの手順を指示します。ni( ) を使用nextiして、興味のないライブラリ関数をステップ オーバーすることができます。それらのいずれかに誤ってステップ インした場合はfinish、元のルーチンに戻る必要があります。このレベルで作業する人は、通常、実行されようとしている次のいくつかの命令を表示するように gdb を設定していますdisp/3i $pc

于 2012-11-16T07:16:13.360 に答える
1

実行の最初の行にブレークポイントを配置してから、各行をステップスルーすることはできませんか? これは、各行にブレークポイントを設定して何を達成しようとしているかによって異なります。式を評価したい場合は、私のロジックに従って実行できます (各行をステップ実行します)。

于 2012-11-16T05:30:21.397 に答える
0

PowerPC には範囲指定ブレークポイントのハードウェア サポートがあり、GCB は以下を提供します。

break-range start end

そのアーチで。したがって、メモリアドレス全体、またはテキストセクション全体(テストされていない)でブレークできると思います。

コマンドは x86 で失敗します。

ドキュメント: https://sourceware.org/gdb/onlinedocs/gdb.html#index-break_002drange-1548

于 2015-07-27T16:08:38.940 に答える