Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


15.12 デバッガの制御からのプロセスの解放

プロセスを終了せずにそのプロセスをデバッガの制御から解放するには, DISCONNECT コマンドを入力します。一方,プロセスに EXIT または QUIT コマンドを指定すると,そのプロセスは終了します。

DISCONNECT コマンドは,クライアント/サーバ・モデルのプログラムには必須です。次に例を示します。


all> SHOW PROCESS 
 Number  Name          State            Current PC 
*    1 DBGK$$2727282C  step     SERVER\main\%LINE 18823 
     2 USER1_2         step     CLIENT\main\%LINE 18805 
     3 USER1_3         step     CLIENT\main\%LINE 18805 
all> DISCONNECT 3 
all> SHOW PROCESS 
 Number  Name          State            Current PC 
*    1 DBGK$$2727282C  step     SERVER\main\%LINE 18823 
     2 USER1_2         step     CLIENT\main\%LINE 18805 
all> QUIT 1,2 
DBG> SHOW PROCESS 
  %DEBUG-W-NOPROCDEBUG, there are currently no processes being debugged 
DBG> EXIT 
$ 

デバッガ・カーネルは,デバッグされているイメージと同じプロセス内で実行されることに注意してください。このプロセスに対して DISCONNECT コマンドを発行すると,プロセスは解放されますが,カーネルはアクティブなままです。この状態はプログラム・イメージが実行を終了するまで続きます。 1 つまたは複数の切断された,しかしアクティブなカーネルがユーザ・プログラム空間を占有しているときに,新しいバージョンのデバッガをインストールすると,そのプログラム・イメージへの再接続を試みたときにデバッガが異常な動作を見せることがあります。

15.13 特定のプロセスの終了

デバッグ・セッションを終了することなく,指定したプロセスだけを終了するには,EXIT または QUIT コマンドのパラメータとして 1 つまたは複数のプロセスを指定します。たとえば,


all> SHOW PROCESS 
 Number  Name          State            Current PC 
*    1 DBGK$$2727282C  step     SERVER\main\%LINE 18823 
     2 USER1_2         step     CLIENT\main\%LINE 18805 
all> QUIT 1,2 
DBG> SHOW PROCESS 
  %DEBUG-W-NOPROCDEBUG, there are currently no processes being debugged 
DBG> EXIT 
$ 

15.14 プログラム実行への割り込み

Ctrl/C,または SET ABORT_KEY コマンドによって設定された強制終了キー・シーケンスを押すことによって,現在イメージを実行しているすべてのプロセス内で,実行に割り込みをかけることができます。これは,SHOW PROCESS の表示では,Interrupted 状態として示されます。

Ctrl/C を使用してデバッガ・コマンドを強制終了させることもできます。

また,デバッガ STOP コマンドでプロセスを中止することもできます。

15.15 デバッグ・セッションの終了

すべてのデバッグ・セッションを終了するには,何もパラメータを指定しないで EXIT コマンドまたは QUIT コマンドを入力します。

EXIT コマンドは,プログラム内で宣言されている任意の終了ハンドラを実行します。QUIT コマンドは,終了ハンドラを実行しません。

QUIT コマンド

QUIT コマンドは,実行中のプロセスを終了させます。 QUIT コマンドは,終了ハンドラを実行せずに,コマンド・プロセス・セット内のすべての実行中のプロセスを終了させます。 QUIT コマンドの前のプロセス・セット接頭辞は無視されます。次に例を示します。


all> SHOW PROCESS 
 Number  Name          State            Current PC 
*    1 DBGK$$2727282C  step     SERVER\main\%LINE 18823 
     2 USER1_2         step     CLIENT\main\%LINE 18805 
all> QUIT 1,2 
DBG> SHOW PROCESS 
  %DEBUG-W-NOPROCDEBUG, there are currently no processes being debugged 
DBG> EXIT 
$ 

QUIT コマンドは現在のプロセス・セットを無視します。プロセスを指定しなかった場合,QUIT コマンドはすべてのプロセスを終了した後に,デバッグ・セッションを終了します。

EXIT コマンド

EXIT コマンドは,実行中のプロセスを終了させます。EXIT コマンドは,終了ハンドラを実行し,コマンド・プロセス・セット内のすべての実行中のプロセスを終了させます。EXIT コマンドの前のプロセス・セット接頭辞は無視されます。次に例を示します。


all> SHOW PROCESS 
 Number  Name          State            Current PC 
*    1 DBGK$$2727282C  step     SERVER\main\%LINE 18823 
     2 USER1_2         step     CLIENT\main\%LINE 18805 
all> EXIT 1,2 
DBG> SHOW PROCESS 
  %DEBUG-W-NOPROCDEBUG, there are currently no processes being debugged 
DBG> EXIT 
$ 

EXIT コマンドは現在のプロセス・セットを無視します。プロセスを指定しなかった場合,EXIT コマンドはすべてのプロセスを終了した後に,デバッグ・セッションを終了します。

15.16 補足情報

この節では, 第 15.1 節 の内容よりもさらに高度な概念および使用法などの詳細な情報について説明します。

15.16.0.1 デバッグ時のプロセス関係

デバッガは,コードの大部分を含む メイン・デバッガ・イメージ (DEBUGSHR.EXE) と,より小さな カーネル・デバッガ・イメージ (DEBUG.EXE) の 2 つの部分からなります。このように分割されているため,デバッガとデバッグされるプログラムが干渉し合う可能性が少なくなり,マルチプロセス・デバッグ構成も可能となります。

保持デバッガの制御下にプログラムを置くと,メイン・デバッガはサブプロセスを作成して,プログラムとカーネル・デバッガを並行に動作させます。

デバッグ中のアプリケーションは,いくつかのプロセスで実行されます。デバッガ制御下で実行している各プロセスは,カーネル・デバッガのローカル・コピーが実行しています。自身のプロセス内で動作しているメイン・デバッガは,カーネル・デバッガを通して他のプロセスと通信します。

すべてのプロセスは,同じ UIC グループ内に存在しなければなりませんが,特定のプロセス/サブプロセス関係の中で関連づけられる必要はありません。また,異なるプロセス内で動作するプログラム・イメージが,お互いに通信する必要はありません。

マルチプロセス・デバッグに関するシステム要件については, 第 15.16.6 項 を参照してください。

15.16.1 デバッガ・コマンド内のプロセス指定

デバッガ・コマンド内でプロセスを指定する場合は,CONNECT コマンドを使用したプロセス指定を除けば, 表 15-2 に示した形式のどれでも使用できます。 第 15.9 節 を参照してください。

CONNECT コマンドを使用すると,デバッガがまだ認識していないプロセスをデバッガの制御下に置くことができます。新しいプロセスは,デバッガの制御下に置かれるまではデバッガが割り当てたプロセス番号を持たず,組み込みプロセス・シンボル (%NEXT_PROCESS など) を使って参照することもできません。したがって,CONNECT コマンドにプロセスを指定するには,プロセス名またはプロセス識別子 (PID) のいずれかしか使用できません。

表 15-2 プロセス指定
形式 使用方法
[%PROCESS_NAME] process-name スペースや小文字を含まないプロセス名。プロセス名にはワイルドカード文字 (*) を含めることができる。
[%PROCESS_NAME] " process-name" スペースまたは小文字を含むプロセス名。二重引用符 (") の代わりに,一重引用符を (') 使用することもできる。
%PROCESS_PID process_id プロセス識別子 (PID,16 進数 )。
[%PROCESS_NUMBER] process-number
(または %PROC process-number)
デバッガの制御下に入ったときにプロセスに割り当てられた番号。新しい番号は,1 から順番に各プロセスに割り当てられる。EXIT コマンドまたは QUIT コマンドによってプロセスが終了しても,そのデバッグ・セッション中はその番号は再割り当てできる。プロセス番号は SHOW PROCESS コマンドの実行で表示される。プロセスは,組み込みシンボル %PREVIOUS_PROCESS および %NEXT_PROCESS によってインデックスづけできるように,循環リスト内に順序づけされる。
process-group-name DEFINE/PROCESS_GROUP コマンドで定義された,プロセスのグループを表すシンボル。
%NEXT_PROCESS デバッガの循環プロセス・リスト中で可視プロセスの次のプロセス。
%PREVIOUS_PROCESS デバッガの循環プロセス・リスト中で可視プロセスの前のプロセス。
%VISIBLE_PROCESS シンボル,レジスタ値,ルーチン呼び出し,ブレークポイントなどの検索時に現在のコンテキストになっているスタック,レジスタ・セット,およびイメージを持つプロセス。

コマンド入力の際は,次のように,組み込みシンボル %PROCESS_NAME および %PROCESS_NUMBER を省略することができます。たとえば,次のようになります。


2> SHOW PROCESS 2, JONES_3

組み込みシンボルの %VISIBLE_PROCESS,%NEXT_PROCESS,および %PREVIOUS_PROCESS は,IF,WHILE,REPEAT の各コマンドに基づいた制御構造内やコマンド・プロシージャ内で利用できます。

15.16.2 プロセスの起動と終了のモニタ

省略時の設定では,トレースポイントは,プロセスがデバッガの制御下に置かれたとき,およびプロセスがイメージ終了命令を実行したときに検出されます。これらの定義済みトレースポイントは,SET TRACE/ACTIVATING コマンドおよび SET TRACE/TERMINATING コマンドをそれぞれ入力した場合と同じ結果をもたらします。SET BREAK/ACTIVATING コマンドおよび SET BREAK/TERMINATING コマンドによって,これらのイベント発生時にブレークポイントを設定することができます。

定義済みのトレースポイントを取り消すには,CANCEL TRACE/PREDEFINED コマンドを /ACTIVATING 修飾子および /TERMINATING 修飾子といっしょに使用します。ユーザ定義の起動時および終了時のブレークポイントを取り消すには,CANCEL BREAK コマンドを /ACTIVATING 修飾子および /TERMINATING 修飾子といっしょに使用します。 /USER 修飾子は,ブレークポイントまたはトレースポイントを取り消す場合の省略時の設定です。

デバッガ・プロンプトは,最初のプロセスがデバッガの制御下に置かれたときに表示されます。その結果,単一プロセス・プログラムの場合のように,メイン・イメージの実行が開始される前にコマンドを入力できます。

同様に,デバッガ・プロンプトは,最後のプロセスがイメージ終了命令を実行したときにも表示されます。その結果,単一プロセス・プログラムの場合のように,プログラムの実行の終了後,コマンドを入力できます。

15.16.3 イメージの実行に割り込みをかけてデバッガに接続する方法

ユーザは,デバッガの制御外で動作しているあるプロセス内のデバッグ可能なイメージに割り込みをかけて,そのプロセスをデバッガに接続することができる。

15.16.4 マルチプロセス・デバッグの画面モード機能

省略時の設定では,ソース,命令,およびレジスタ・ディスプレイは,可視プロセスに関する情報を表示します。

/PROCESS 修飾子を DISPLAY コマンドといっしょに使用して,それぞれプロセス固有のディスプレイを作成したり,既存のディスプレイをプロセス固有にすることができます。プロセス固有のディスプレイは,そのプロセスのコンテキスト内で生成および修正されます。ユーザは,PROMPT ディスプレイを除く任意のディスプレイをプロセス固有にすることができます。たとえば,次のコマンドは,プロセス 3 において,実行が中断している箇所のソース・コードを表示する,ソース・ディスプレイ SRC_3 を自動的に更新します。


2> DISPLAY/PROCESS=(3) SRC_3 AT RS23 -
2> SOURCE (EXAM/SOURCE .%SOURCE_SCOPE\%PC)

同じ方法で,プロセス固有のディスプレイに属性を割り当てて,プロセス固有でないディスプレイにすることもできます。たとえば,次のコマンドは,SRC_3 ディスプレイを,現在のスクロール・ディスプレイおよびソース・ディスプレイにします。すなわち,SCROLL,TYPE,および EXAMINE/SOURCE の各コマンドの出力は SRC_3 に変更されます。


2> SELECT/SCROLL/SOURCE SRC_3

プロセス指定なしの DISPLAY/PROCESS コマンドを入力すると,指定されたディスプレイが,そのコマンドが入力されたときの可視プロセスに固有のディスプレイとなります。たとえば,次のコマンドは,ディスプレイ OUT_X をプロセス 2 に固有のディスプレイにします。


2> DISPLAY/PROCESS OUT_X

マルチプロセス構成では,プロセス起動時の定義済みのトレースポイントが,新しくデバッガの制御下に置かれたプロセスごとに,新しいソース・ディスプレイと新しい機械語命令ディスプレイを自動的に作成します。これらのディスプレイ名は,それぞれソース・ディスプレイは SRC_n および機械語命令ディスプレイは INST_n という形式になります。ここで,n はプロセス番号です。これらのディスプレイは,最初に削除されたものとしてマークされます。それらは,プロセスが終了すると自動的に削除されます。

いくつかの定義済みキーパッド・キー・シーケンスを使用すれば,プロセスが起動されたときに自動的に作成されるプロセス固有のソース・ディスプレイおよび機械語命令ディスプレイを使用して,画面を構成できます。マルチプロセス・プログラム固有のキー・シーケンスは次のとおりです。PF1 KP9,PF4 KP9,PF4 KP7,PF4 KP3,PF4 KP1。これらのシーケンスの意味については 付録 A.5 節 を参照してください。これらのシーケンスに正確に対応するコマンドを知るには,SHOW KEY コマンドを使用します。

15.16.5 グローバル・セクション内でのウォッチポイントの設定 (Alpha のみ)

Alpha では,グローバル・セクション内にウォッチポイントを設定できます。グローバル・セクションは,マルチプロセス・プログラムのすべてのプロセス間で共有されるメモリ領域です。グローバル・セクション内のある記憶位置に設定されたウォッチポイント ( グローバル・セクション・ウォッチポイント ) は,任意のプロセスがその記憶位置の内容を変更したときに検出されます。

SET WATCH コマンドを使用して配列やレコードにウォッチポイントを設定する場合には,構造体全体を指定するよりも各要素を指定したほうが性能が向上することに注意してください。

グローバル・セクションにマップされていない記憶位置にウォッチポイントを設定すると,そのウォッチポイントは従来の静的なウォッチポイントとして処理されます。次に例を示します。


1> SET WATCH ARR(1)
1> SHOW WATCH
watchpoint of PPL3\ARR(1)

この後,ARR がグローバル・セクションにマップされると,ウォッチポイントは自動的にグローバル・セクション・ウォッチポイントとみなされるようになり,それを通知する情報メッセージが発行されます。次に例を示します。


1> GO
%DEBUG-I-WATVARNOWGBL, watched variable PPL3\ARR(1) has 
        been remapped to a global section 
predefined trace on activation at routine PPL3 in %PROCESS_NUMBER 2 
predefined trace on activation at routine PPL3 in %PROCESS_NUMBER 3 
watch of PPL3\ARR(1) at PPL3\%LINE 93 in %PROCESS_NUMBER 2 
    93:          ARR(1) = INDEX 
   old value: 0 
   new value: 1 
break at PPL3\%LINE 94 in %PROCESS_NUMBER 2 
   94:           ARR(I) = I

ウォッチされている記憶位置がグローバル・セクションにマップされると,そのウォッチポイントは,次のように,各プロセスから見えるようになります。


all> SHOW WATCH
For %PROCESS_NUMBER 1 
  watchpoint of PPL3\ARR(1) [global-section watchpoint] 
For %PROCESS_NUMBER 2 
  watchpoint of PPL3\ARR(1) [global-section watchpoint] 
For %PROCESS_NUMBER 3 
  watchpoint of PPL3\ARR(1) [global-section watchpoint] 
all>


前へ 次へ 目次 索引