日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 部:デバッガ概要
第 1 章:デバッガ概要
第 2 部:コマンド・インタフェース
第 2 章:デバッガの起動
第 3 章:プログラム実行の制御とモニタ
第 4 章:プログラム・データの検査と操作
第 5 章:プログラム内シンボルへのアクセス制御
第 6 章:ソース・コードの表示の制御
第 7 章:画面モード
第 3 部:DECwindows インタフェース
第 8 章:DECwindows Motifインタフェースの概要
第 9 章:デバッグ・セッションの開始と終了
第 10 章:デバッガの使用方法
第 4 部:PC クライアント・インタフェース
第 11 章:デバッガの PC クライアント/サーバ・インタフェースの概要
第 5 部:高度なトピック
第 12 章:ヒープ・アナライザの使用
第 13 章:その他の便利な機能
第 14 章:特殊なデバッグ
第 15 章:マルチプロセス・プログラムのデバッグ
第 16 章:タスキング・プログラムのデバッグ
第 6 部:付録
付録 A :定義済みのキー機能
付録 B :組み込みシンボルと論理名
付録 C :各言語に対するデバッガ・サポートの要約
付録 D :EIGHTQUEENS.C
索引
PDF
OpenVMS ホーム

HP OpenVMS
デバッガ説明書


目次 索引

第 15 章
マルチプロセス・プログラムのデバッグ

本章では,デバッガの機能のうちマルチプロセス・プログラム (2 つ以上のプロセスで動作するプログラム ) 独自のものについて説明します。これらの機能を使用して,プロセス情報を表示したり,特定のプロセスの実行を制御することができます。他章で説明した機能とあわせて使用してください。

本章で扱うすべてのイメージはデバッグ可能であり,デバッガで制御することができます。/NOTRACEBACK 修飾子を指定してリンクされたイメージは,デバッガの制御下に置くことはできません。 第 1.2 節 で説明したように,イメージのデバッグ時にすべてのシンボル情報にアクセスできるのは,そのモジュールを /DEBUG 修飾子を使用してコンパイルおよびリンクするときだけです。

15.1 基本的なマルチプロセス・デバッグ方法

この節では,マルチプロセス・デバッグの基本的な概念を紹介します。詳しい情報については,後の節を参照してください。

15.1.1 マルチプロセス・デバッグ・セッションの開始

この項では,マルチプロセス・デバッグ・セッションを開始する最も簡単な方法について説明します。 第 15.16.3 項 では,デバッガのその他の起動方法について説明しています。

マルチプロセス・デバッグ・セッションを開始するには,保持デバッガを起動します。次に例を示します。

$ 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 コマンドは,指定された各プロセスについて以下の情報を表示します。

  • デバッガによって割り当てられたプロセス番号。 例 15-2 では,デバッガが最初に認識したプロセスなので,プロセス番号は 1 になる。最左端の欄のアスタリスク(*)は,可視プロセスを示す。

  • プロセス名。この例では,プロセス名は JONES である。

  • そのプロセスの現在のデバッグ状態。 プロセスは,最初にデバッガ制御下に置かれたとき (デバッガの制御下でプログラムを実行する直前),起動状態にある。 表 15-1 は,デバッガ制御下のプロセスのデバッグ状態の取りうる値を要約したものである。

  • そのプロセス内でイメージの実行が停止している記憶位置 (可能ならシンボル化されたもの)。 例 15-2 では,イメージはまだ実行を開始していない。

表 15-1 デバッグ状態
状態 説明
Running デバッガ制御下での実行。
Stopped  
  Activated イメージとそのプロセスがデバッガの制御下に置かれた直後。
  Break 1 ブレークポイントが検出された。
  Interrupted 次の方法の 1 つで,プロセスの実行が中断された。

  • 他プロセスで実行が中断された。

  • 強制終了キー・シーケンス ( 省略値の設定では Ctrl/C) で中断された。

  • STOP コマンドによって中断された。

  Step 1 STEP コマンドが終了した。
  Trace 1 トレースポイントが検出された。
  Unhandled exception 未処理例外が発生した。
  Watch of ウォッチポイントが検出された。
  Terminated イメージの実行は終了したが,プロセスはまだデバッガの制御下に置かれている。したがって,ユーザは,イメージとそのプロセスに関する情報を得ることができる。

1上記以外のデバッグ状態については, SHOW PROCESS コマンドの説明を参照してください。

例 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 と表示されます。

15.3 プロセス指定

デバッガが接続する個々の新規プロセスは, プロセス番号によって識別されます。最初のプロセスにはプロセス番号 1,次のプロセスにはプロセス番号 2 が割り当てられます。プロセスが停止すると,そのプロセス番号はリサイクルされ,デバッガはそれ以降のプロセスに同じ番号を割り当てられるようになります。

プロセスはプロセス指定を使って参照されます。最も単純なプロセス指定は,プロセスの作成時に OpenVMS が作成するプロセス名と,デバッガがプロセスを制御下に置くときに作成するプロセス番号です。番号だけから構成されるプロセス指定はプロセス番号として解釈されます。デバッガ・コマンドの中では,プロセス番号を使って個々のプロセスを指定することができます (例: "2,3,4,5")。

プロセス指定項目としては名前を使用することができ,その場合にはプロセス名またはプロセス・セット名を参照することができます。デバッガはまずその名前を持つプロセス・セットを探します。これに失敗した場合,デバッガはその名前を持つプロセスを探します。 %PROCESS_NAME レキシカル関数を使用すると,明示的にプロセス名を指定することができます。

例 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 
 



15.4 プロセス・セット

DEFINE PROCESS_SET コマンドの後に,コンマ (,) で区切ったプロセスのリストを指定することで,プロセスをプロセス・セットと呼ばれるグループに入れることができます。次に例を示します。

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 つの機能を持っています。

  • 現在のプロセス・セットを指定する。

  • /VISIBLE 修飾子で可視プロセスを制御する。

  • /[NO]DYNAMIC 修飾子で動的なプロセス設定のオン/オフを切り替える。

修飾子なしで使用した場合,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> 
 

  注意
デバッガは複数のプロセスを認識するまで,プロセス指定形式のデバッガ・プロンプトを使用しません。



コマンドにはプロセス依存コマンドとプロセス独立コマンドの 2 つの種類があります。

プロセス依存コマンドは,GO,STEP,CALL,および SET BREAK のように,プロセスの状態に依存するコマンドです。

プロセス独立コマンドは,SET DISPLAY,WAIT,ATTACH,および SPAWN のように,デバッガの状態に依存し,またデバッガの状態に影響を与え,プロセスの状態は無視するコマンドです。

15.7 可視プロセスとプロセス依存コマンド

可視プロセスは,省略時の設定でソース・ディスプレイ (およびその他のプロセス指向のディスプレイ) に表示されるプロセスです。 SET PROCESS コマンドで現在のプロセス・セットが変更されると,可視プロセスはそのコマンドで指定された最初のプロセスに設定されます。 SET PROCESS/VISIBLE コマンドを使用すると,現在のプロセス・セットを変更せずに,特定のプロセスを可視プロセスとして指定することができます。

15.8 プロセス実行の制御

複数のプロセスを持つアプリケーションをデバッグするときには,他のプロセスの実行中に特定のプロセスを停止するということがよく行われます。すべてのプロセスが停止するのを待たずに,停止されたプロセスに対してのみコマンドを指定できると便利です。このような機能は WAIT モードによって実現されています。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.