日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
本章では,デバッガの機能のうちマルチプロセス・プログラム (2 つ以上のプロセスで動作するプログラム ) 独自のものについて説明します。これらの機能を使用して,プロセス情報を表示したり,特定のプロセスの実行を制御することができます。他章で説明した機能とあわせて使用してください。
本章で扱うすべてのイメージはデバッグ可能であり,デバッガで制御することができます。/NOTRACEBACK 修飾子を指定してリンクされたイメージは,デバッガの制御下に置くことはできません。 第 1.2 節 で説明したように,イメージのデバッグ時にすべてのシンボル情報にアクセスできるのは,そのモジュールを /DEBUG 修飾子を使用してコンパイルおよびリンクするときだけです。
この節では,マルチプロセス・デバッグの基本的な概念を紹介します。詳しい情報については,後の節を参照してください。
この項では,マルチプロセス・デバッグ・セッションを開始する最も簡単な方法について説明します。 第 15.16.3 項 では,デバッガのその他の起動方法について説明しています。
マルチプロセス・デバッグ・セッションを開始するには,保持デバッガを起動します。次に例を示します。
15.1 基本的なマルチプロセス・デバッグ方法
15.1.1 マルチプロセス・デバッグ・セッションの開始
$ debug/keep OpenVMS I64 Debug64 Version T8.2-008 DBG> |
マルチプロセス・デバッグ・セッションでは,デバッガは制御下に置かれた個々の新しいプロセスをトレースします。デバッガは, 例 15-1 のような 10 進数のプロセス番号を使って,各プロセスを識別します。
例 15-1 RUN/NEW コマンド |
---|
DBG> SHOW PROCESS Number Name State Current PC * 1 DBGK$$2727282C activated SERVER\__main DBG> RUN/NEW CLIENT process 2 %DEBUG-I-INITIAL, Language: C, Module: CLIENT %DEBUG-I-NOTATMAIN, Type GO to reach MAIN program predefined trace on activation at CLIENT\__main all> SHOW PROCESS Number Name State Current PC * 1 DBGK$$2727282C activated SERVER\__main 2 USER_2 activated CLIENT\__main all> |
例 15-1 の RUN/NEW CLIENT コマンドは,新しいプロセスの中でプログラム CLIENT を起動します。デバッガは, (そのデバッグ・セッションの中で) 初めて複数のプロセスが制御下に置かれた時点で,制御下に置かれているすべてのプロセスのセットを識別するためにプロンプトを all> に変更します。
デバッガが複数のプロセスを認識すると,デバッガ・プロンプトは現在のプロセス・セットの識別子の後に右山括弧 (>) を続けたものに変更されます。
概念上,各プロセスは,省略時にはデバッガがそのプロセスを制御下に置いたときに割り当てられた一意の 10 進数によって識別される, 1 つのプロセスが含まれるセットに属しています。プロセスは複数のセットに属することができます。デバッガの制御下に置かれたすべてのプロセスは,省略時には all という名前のセットにグループ化されます。
DEFINE /PROCESS_SET コマンドを使用すると,ユーザが名前を付けたセットにプロセスをグループ化することができます。
デバッガ・コマンドは,省略時には現在のプロセス・セットに適用されます。省略時の設定では,現在のプロセス・セットは all という名前のセットです。 SET PROCESS コマンドを使用すると,現在のプロセス・セットを変更することができます。
コマンドの対象となるプロセスのセットは コマンド・プロセス・セットと呼ばれます。省略時のコマンド・プロセス・セットは,現在のプロセス・セットです。
現在のプロセス・セットを変更することなく,現在のプロセス・セット以外のコマンド・プロセス・セットにデバッガ・コマンドを適用することができます。このためには,コマンドの接頭辞として,プロセス・セットの名前の後に右山括弧 (>) を続けます。次に例を示します。
all> 1,2,5> GO |
1,2,5> はプロセス・セット接頭辞です。この構文により,前のコマンド行からコマンドをカットしてペーストすることができます。
可視プロセスは現在のディスプレイに表示されているプロセスのことで,SHOW PROCESS ディスプレイの最左端の欄にアスタリスク (*) が付いています。可視プロセスは SET PROCESS/VISIBLE コマンドで変更できます。次に例を示します。
all> SHOW PROCESS Number Name State Current PC * 1 DBGK$$2727282C activated SERVER\__main 2 USER_2 activated CLIENT\__main all> |
上の例では,プロセス番号 1 が可視プロセスです。
15.2 プロセス情報の取得
現在のデバッグ・セッションの制御下にあるプロセス情報を取得するには, SHOW PROCESS コマンドを使用します。省略時の設定では,SHOW PROCESS コマンドは,デバッガ制御下のすべてのプロセス情報を表示します。 (これらはプロセス・セットの全プロセスです。) 例 15-2 は,デバッガ起動直後に表示される情報の1例です。
例 15-2 SHOW PROCESS コマンド |
---|
DBG> SHOW PROCESS/BRIEF/ALL Number Name State Current PC * 1 JONES activated MAIN_PROG\%LINE 2 DBG> |
修飾子 /BRIEF と /ALL は省略時の設定です。また,デバッガはまだ 1 つのプロセスしか制御下に置いていないので,省略時のプロンプトを表示していることに注意してください。 SHOW PROCESS コマンドは,指定された各プロセスについて以下の情報を表示します。
状態 | 説明 | |
---|---|---|
Running | デバッガ制御下での実行。 | |
Stopped | ||
Activated | イメージとそのプロセスがデバッガの制御下に置かれた直後。 | |
Break 1 | ブレークポイントが検出された。 | |
Interrupted | 次の方法の 1 つで,プロセスの実行が中断された。
|
|
Step 1 | STEP コマンドが終了した。 | |
Trace 1 | トレースポイントが検出された。 | |
Unhandled exception | 未処理例外が発生した。 | |
Watch of | ウォッチポイントが検出された。 | |
Terminated | イメージの実行は終了したが,プロセスはまだデバッガの制御下に置かれている。したがって,ユーザは,イメージとそのプロセスに関する情報を得ることができる。 |
例 15-2 で,SHOW PROCESS コマンドの後ろに STEP コマンドを入力すると,SHOW PROCESS 表示の状態欄は,ステップ実行完了後,実行が停止していることを示します。次に例を示します。
DBG> STEP DBG> SHOW PROCESS Number Name State Current PC * 1 JONES step MAIN_PROG\%LINE 3 DBG> |
同じように,ブレークポイントを設定した後に GO コマンドを入力した場合,ブレークポイントがトリガされた後に SHOW PROCESS コマンドを入力すると,状態は break と表示されます。
デバッガが接続する個々の新規プロセスは,
プロセス番号によって識別されます。最初のプロセスにはプロセス番号 1,次のプロセスにはプロセス番号 2 が割り当てられます。プロセスが停止すると,そのプロセス番号はリサイクルされ,デバッガはそれ以降のプロセスに同じ番号を割り当てられるようになります。
プロセスはプロセス指定を使って参照されます。最も単純なプロセス指定は,プロセスの作成時に OpenVMS が作成するプロセス名と,デバッガがプロセスを制御下に置くときに作成するプロセス番号です。番号だけから構成されるプロセス指定はプロセス番号として解釈されます。デバッガ・コマンドの中では,プロセス番号を使って個々のプロセスを指定することができます (例: "2,3,4,5")。
プロセス指定項目としては名前を使用することができ,その場合にはプロセス名またはプロセス・セット名を参照することができます。デバッガはまずその名前を持つプロセス・セットを探します。これに失敗した場合,デバッガはその名前を持つプロセスを探します。 %PROCESS_NAME レキシカル関数を使用すると,明示的にプロセス名を指定することができます。
例 15-3 は,完全なプロセス指定構文を示しています。
15.3 プロセス指定
例 15-3 プロセス指定構文 |
---|
process-spec ::= process-spec-item [, process-spec-item] process-spec-item ::= named-item | numbered-item | pid-item | process-set-name | special-item named-item ::= [%PROCESS_NAME] wildcard-name numbered-item ::= numbered-process numbered-process ::= [%PROCESS_NUMBER] decimal-number pid-item ::= %PROCESS_ID VMS-process-identifier process-set-name ::= name special-item ::= %NEXT_PROCESS | %PREVIOUS_PROCESS | %VISIBLE_PROCESS |
all> DEFINE/PROCESS CLIENTS = 2,3 all> SET PROCESS CLIENTS clients> STEP process 2,3 stepped to CLIENT\main\%LINE 18796 18796: status = sys$crembx (0, &mbxchan, 0, 0, 0, 0, &mbxname_dsc, CMB$M_READONLY, 0); clients> SHOW PROCESS CLIENTS Number Name State Current PC 2 USER1_2 step CLIENT\main\%LINE 18796 3 USER1_3 step CLIENT\main\%LINE 18796 clients> |
all という名前の定義済みのプロセス・セットは,デバッガが初めて起動されたときの省略時のプロセス・セットとなっています。このプロセス・セットを再定義することはできません。
デバッグ・セッションの中では,つねに現在のプロセス・セットが有効となっています。現在のプロセス・セットは,デバッガのプロセス依存コマンドが省略時の設定として適用されるプロセスのグループです。プロセスに依存するデバッガ・コマンドの一覧については, 第 15.6 節 を参照してください。
省略時の設定では,現在のプロセス・セットはすべてのプロセスのセットで,プロセス・セット名は all となっています。現在のプロセス・セットは SET PROCESS コマンドで変更できます。
SET PROCESS コマンドは 3 つの機能を持っています。
修飾子なしで使用した場合,SET PROCESS コマンドは,現在のプロセス・セットを指定するプロセス指定を単一パラメータとして取ります。次に例を示します。
all> SET PROCESS 1 1> STEP process 1 stepped to SERVER\main\%LINE 18800 18800: if (!(status & 1)) 1> SET PROCESS ALL all> |
SET PROCESS/DYNAMIC コマンドは,STEP コマンドの完了やブレークポイントのトリガといったデバッガ・イベントが発生したときに,可視プロセスを変更するようにデバッガに指示します。イベントをトリガしたプロセスが可視プロセスになります。次に例を示します。
all> SET PROCESS/DYNAMIC all> 1> STEP process 1 stepped to SERVER\main\%LINE 18808 18808: df_p = fopen (datafile, "r+"); all> SHOW PROCESS/VISIBLE Number Name State Current PC * 1 DBGK$$2727282C step SERVER\main\%LINE 18808 all> |
コマンド・プロセス・セットは,デバッガ・コマンドが適用されるプロセスのグループです。省略時の設定では,コマンド・プロセス・セットは現在のプロセス・セットです。プロセス・セット接頭辞を使用して,現在のコマンドの対象となるコマンド・プロセス・セットを指定することができます。この場合には,その 1 つのコマンドについてのみ,現在のプロセス・セットが上書きされます。次に例を示します。
all> 2,3> STEP processes 2,3 stepped to CLIENT\main\%LINE 18797 18797: if (!(status & 1)) all> clients> STEP processes 2,3 stepped to CLIENT\main\%LINE 18805 18805: memset (&myiosb, 0, sizeof(myiosb)); all> |
プロセス独立コマンドは,現在のプロセス・セットと同様に,プロセス・セット接頭辞をすべて無視します。
省略時の設定では,デバッガ・コマンド・プロンプトは,プロセス指定と同じ構文を使用して,現在のプロセス・セットを示しています。コマンド・プロンプトは,現在のプロセス・セットのプロセス指定の後に右山括弧 (>) を続けたものです。現在のプロセス・セットを定義すると,デバッガは現在のプロセス・セットの名前の後に右山括弧を続けたものにプロンプトを変更します。次に例を示します。
15.5 デバッガ・プロンプト
all> ! by default, current process set is all processes all> all> SET PROCESS 2,3,4,5 2,3,4,5> DEFINE /PROCESS_SET interesting 1,2,3,7 2,3,4,5> SET PROCESS interesting interesting> SET PROCESS * all> SET PROCESS 3 3> |
注意 デバッガは複数のプロセスを認識するまで,プロセス指定形式のデバッガ・プロンプトを使用しません。 |
15.6 プロセス依存コマンド |
コマンドにはプロセス依存コマンドとプロセス独立コマンドの 2 つの種類があります。
プロセス依存コマンドは,GO,STEP,CALL,および SET BREAK のように,プロセスの状態に依存するコマンドです。
プロセス独立コマンドは,SET DISPLAY,WAIT,ATTACH,および SPAWN のように,デバッガの状態に依存し,またデバッガの状態に影響を与え,プロセスの状態は無視するコマンドです。
15.7 可視プロセスとプロセス依存コマンド
可視プロセスは,省略時の設定でソース・ディスプレイ (およびその他のプロセス指向のディスプレイ) に表示されるプロセスです。 SET PROCESS コマンドで現在のプロセス・セットが変更されると,可視プロセスはそのコマンドで指定された最初のプロセスに設定されます。 SET PROCESS/VISIBLE コマンドを使用すると,現在のプロセス・セットを変更せずに,特定のプロセスを可視プロセスとして指定することができます。
15.8 プロセス実行の制御
複数のプロセスを持つアプリケーションをデバッグするときには,他のプロセスの実行中に特定のプロセスを停止するということがよく行われます。すべてのプロセスが停止するのを待たずに,停止されたプロセスに対してのみコマンドを指定できると便利です。このような機能は WAIT モードによって実現されています。
目次 | 索引 |
|