2017-02-03 4 views
0

私がやろうとしているのは、プロセスをフォークし、子プロセスで新しい実行可能ファイルを実行し、親プロセスを終了させ、この子プロセスをデバッグするためにGDBによって子プロセスにアタッチさせます。私が最初の親プロセスを使って子プロセス(デバッグ可能)をフォークする理由は、この子プロセスのいくつかの環境プロパティを設定したいのです。これはLinuxカーネルへのシステムコールを必要とし、そうするためにGDBを変更したくありません。私は、親プロセスが終了した後にGDBを通して子プロセスにアタッチできることを試みましたが、その場合、exec()システムコールの後で子プロセスがすでに実行されています。 問題は、子にptrace(PTRACE_TRACEME)を使用できないため、最初の命令で停止する原因になります。その場合、GDBはその親によってすでにトレースされているため、GDBにアタッチできないからです。 子プロセスがexec()を実行したときに最初の命令で停止するように、環境を設定した後、どのようにして子プロセスを停止できますか?exec()の後に新しく実行されたプログラムの最初の命令で子プロセスを停止するにはどうしたらいいですか?

答えて

0

私は自分の必要性を満たしている方法を見つけました。他人に役立つように投稿しています。フォーク後、必要な環境を設定し、デバッグ対象のプログラムを実行する直前に{kill(getpid()、SIGSTOP)}に停止信号を送ります。親が子プロセスを待つことなく、終了させる。そのため、pidは1つだけです。オープンGDBは "gdb -p pid"を使ってそれに接続します。停止信号はGDBに送られます。 GDBプロンプトでコマンドsig 0を与えてプロセスを続行します。子プロセスは続行し、次にデバッグ可能なプログラムを実行すると、今すぐ通常どおりデバッグすることができます。

関連する問題