Previous: Threads, Up: Running


4.11 マルチプロセス・プログラムのデバッグ

fork関数を使用して新たにプロセスを生成するプログラムのデバッグに関しては、 GDBは特別な機能を提供していません。 プログラムがforkを実行するとき、 GDB は引き続き親プロセスのデバッグを継続し、 子プロセスは妨げられることなく実行を続けます。 子プロセスが実行するコードにブレイクポイントを設定してあると、 子プロセスはSIGTRAPシグナルを受信し、 (そのシグナルをキャッチする処理がなければ) 子プロセスは終了してしまいます。

しかし、 子プロセスをデバッグしたい場合には、 それほど困難ではない回避策があります。 forkの呼び出し後に子プロセスが実行するソース・コードの中に、 sleep関数の呼び出しを加えてください。 GDBに子プロセスのデバッグをさせる理由がないときに遅延が発生することのないように、 特定の環境変数が設定されているときのみ、 あるいは、 特定のファイルが存在するときのみ、 sleep関数を呼び出すようにするとよいでしょう。 子プロセスがsleepを呼び出している間に、 psユーティリティを使用して子プロセスのプロセスIDを獲得します。 次に、 GDBに対して (親プロセスもデバッグするのであれば、 新たにGDBを起動して、 そのGDBに対して)、 子プロセスにアタッチするよう指示してください (see Attach)。 これ以降は、 通常の方法でプロセスにアタッチした場合と全く同様に、 子プロセスのデバッグが可能です。