2017-03-07 3 views
1

よりも、子プロセスを開始します:gdb --args parentExecutable LotsOfArgsForParentGDBコマンドを実行すると、私は、次のようにgdbを起動し、むしろ親

私も実行します。set follow-fork-mode child

parentExecutableいくつかの点でフォークといくつかの引数でchildExecutableを実行します。私はしばらくの間、子供をデバッグします。次に、を実行して、コマンドgdbを使用して、parentExecutableを最初に指定した引数で再起動します。ただし、代わりに子実行可能なが引数なしでゼロから再起動します。最初に提供された引数を使用してgdbを親プロセスから起動させるにはどうすればよいですか?

+0

私は少し推測していますが、それはそれがアクティブなプロセスであるためです。 "info inferiors"コマンドを実行してデバッグ対象のプロセスを一覧表示し、 "下位n"と入力して親プロセスをアクティブ/選択プロセスにします。私は子供を殺さないだろうと思うが、私は親を再起動するために実行することを期待したい。 – joeking

答えて

1

このシナリオでは2つのモードが注目されます。 1つのモードはfollow-fork-modeで、gdbに下位のフォークが何をするかを指示します。しかし、follow-exec-modeもあり、gdbにexecコールの処理方法を指示します。

follow-exec-modeのデフォルト設定はsameです。これはgdbにexec'dプロセスの現在の下位レベルを再利用するように指示します。この状況では、子プロセスが停止すると、runが子プロセスを再実行します。

代わりに、set follow-exec-mode newです。このモードでは、gdbはexecに応答して新しい劣位を作成します。次に元の実行ファイルを再実行する場合は、最初の下位に戻すことができます(リストを取得するにはinfo inferiorを使用し、リストを選択するにはinferiorコマンドを使用します)。その後runは元のファイルを再実行します。

これを行う別の方法は、複数の劣ったデバッグで、set detach-on-fork offを使用します。しかし、私の経験では、このモードはまだ少しばかりです。しかし、それがうまくいくと、私はそれが好ましいアプローチだと思う。

関連する問題