Sun Studio 12: dbx コマンドによるデバッグ

第 12 章 子プロセスのデバッグ

この章では、子プロセスのデバッグ方法について説明します。dbx は、fork (2) および exec (2) を介して子を作成するプロセスのデバッグに役立つ機能をいくつか備えています。

この章の内容は次のとおりです。

単純な接続の方法

子プロセスがすでに作成されている場合は、次のいずれかの方法でそのプロセスに接続できます。


$ dbx program_name process_id

(dbx) debug program_name process_id

どちらの場合も program_name を "-" に置き換えることができます。そうすると dbx は指定されたプロセス ID (process_id) に対応する実行可能ファイルを自動的に見つけ出します。"-" を使用すると、それ以後 run コマンドおよび rerun コマンドは機能しません。これは、dbx が実行可能ファイルの絶対パス名を知らないためです。

Sun Studio IDE の「デバッガ」ウィンドウからは、実行中の子プロセスにも結合できます (IDE オンラインヘルプの「実行中のプロセスへデバッガの接続」を参照してください)。

exec 機能後のプロセス追跡

子プロセスが新しいプログラムを exec(2) 関数を用いて実行すると、そのプロセス ID は変わりませんが、プロセスイメージは変化します。dbxexec() の呼び出しを自動的に検知し、新しく実行されたプログラムを自動的に再読み込みします。

実行可能ファイルの元の名前は、$oprog に保存されます。この名前に復帰するには、debug $oprog を使用します。

fork 機能後のプロセス追跡

子プロセスが、関数 vfork()fork(1)、 または fork(2) を呼び出すと、プロセス ID が変化しますが、プロセスイメージは変化しません。dbx 環境変数 follow_fork_mode の設定値に従って、dbx は次のように動作します。

parent (親プロセス)

従来の動作です。dbx は fork を無視し、親プロセスを追跡します。

child (子プロセス)

dbx は、新しいプロセス ID で、分岐先の子に自動的に切り替わります。元の親のすべての接続と認識が失われています。

both (両方)

このモードは、Sun Studio IDE から dbx を使用する場合しか利用できません。

ask (質問)

dbx が fork を検出するたびにプロンプトが表示され、parentchildboth のどのモードを使用するか問い合わせできます。stop を選択すると、プログラムの状態を調べてから、cont を使用して実行を続けることができます。プロンプトに従って次の処理を選択します。

イベントとの対話

exec() 関数や fork() 関数では、ブレークポイントやほかのイベントが、すべて削除されます。しかし、dbx 環境変数で follow_fork_inheriton に設定するか、-perm eventspec 修飾子でイベントを持続イベントにすれば、ブレークポイントやほかのイベントは削除されません。イベント仕様修飾子の使用方法の詳細については、cont at コマンド」を参照してください。