0

gdb で低レベルの C プログラムをデバッグしようとしています。問題のプログラムは、ラッパーとして機能し、別のプロセスを起動し、そのメモリ使用を監視/干渉することを意図しています。

プログラムを gdb にロードすると、最初は (理想的ではないにしても) すべてが正常に見えます。新しいプロセス フォークが表示されますが、ハングします。それ自体は、それほど奇妙ではありません。コードのどこかでデッドロックまたは無限ループが発生している可能性があります。

しかし、gdb 内でプロセスを中断して強制終了し、同じ gdb セッション内で再度実行すると、すべてが完全に正常に動作します。実行には約 0.5 秒かかり、正確に動作します。

私の質問は次のとおりです。プログラムの実行間でgdbが保持しているのは何ですか? 1 回目と 2 回目の実行で何が変わるでしょうか。

4

1 に答える 1

0

gdb がこのように動作する理由はまだわかりませんが、原因はわかりました。しかし、他の人に役立つ場合に備えて、ここに投稿します。

gdbを起動しました:

gdb --args ./mywrapper testers_exe/tester-2

初めて実行する場合:

/home/ユーザー名/mywrapper testers_exe/tester-2

しかし、強制終了して再度実行すると、与えられた引数ではなく、最新のプロセスを模倣しました。

/home/ユーザー名/testers_exe/tester-2 testers_exe/tester-2

したがって、ラッパーなしでテストを実行し、ラッパーの無限ループを回避しました。

于 2016-09-30T17:51:47.900 に答える