dbx コマンドによるデバッグ ホーム目次前ページへ次ページへ索引


第 13 章

子プロセスのデバッグ

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

この章は次の各節から構成されています。

単純な接続の方法

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

dbx 起動時、シェルから次のように入力します。

$ dbx progname pid

コマンド行からは次のように入力します。

(dbx) debug progname pid

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

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

exec 機能後のプロセス追跡

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

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

fork 機能後のプロセス追跡

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

parent (親プロセス) 従来の動作です。dbx は fork を無視し、親プロセスを追跡します。
child (子プロセス) dbx は、新しいプロセス ID で、分岐先の子に自動的に切り替わります。
both (両方) このモードは、Sun WorkShop から dbx を使用する場合しか利用できません。
ask (質問) dbx が fork を検出するたびにプロンプトが表示され、parent、child、both のどのモードを使用するか問い合わせてきます。stop を選択すると、プログラムの状態を調べてから、cont を使用して実行を続けることができます。プロンプトに従って次の処理を選択します。


イベントとの対話

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


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引