前へ | 次へ | 目次 | 索引 |
EXAMINE コマンドはアドレス式で示す記憶位置に要素を表示します。このコマンドを使用すれば,プログラムでアクセスできるメモリ記憶位置またはレジスタの内容を表示できます。高級言語の場合,このコマンドは変数(整数,実数,文字列,配列,レコードなど)の現在の値を獲得するために使用されることがほとんどです。最適化されたコードをデバッグすると,EXAMINE コマンドは,スプリット・ライフタイム変数が値を受け取る定義ポイントを表示します。スプリット・ライフタイム変数についての詳しい説明は,『デバッガ説明書』を参照してください。省略時の設定では,EXAMINE コマンドは,最高 5 つまでの定義ポイントを表示します。/DEFINITIONS 修飾子を使用すると,定義ポイントの数を指定できます。
デバッガはシンボリック・アドレス式(プログラムで宣言されたシンボリック名)に対応するコンパイラ生成型を認識します。シンボリック・アドレス式には次の要素が含まれます。
- 変数名。EXAMINE コマンドで変数を指定するときは,ソース・コードで使用される構文と同じ構文を使用する。
- ルーチン名,ラベル,行番号。これらは命令に対応している。変数の値を調べるときと同じ方法を使用して命令も表示できる。
通常,EXAMINE コマンドを入力すると,デバッガはプログラム記憶位置を求めるために指定されたアドレス式を評価します。そしてその位置に格納されている値を次のように表示します。
- その記憶位置にシンボリック名がある場合には,デバッガはそのシンボルに対応するコンパイラ生成型に従って(つまり,命令または特定の型の変数として)値を編集します。
- その記憶位置にシンボリック名がない場合(したがって,対応するコンパイラ生成型もない場合)には,デバッガは省略時の設定では longword integer 型で値を編集します。これは省略時の設定では,EXAMINE コマンドはロングワード(4バイト)整数値としてこれらの記憶位置の内容を表示することを意味します。
ベクタ・レジスタ(VAX のみ)とベクタ命令(VAX のみ)に特有の情報については,/TMASK,/FMASK および /OPERANDS の修飾子を参照してください。
プログラム記憶位置に対応する型を変更して,その記憶位置のデータを他のデータ形式で表示できるようにする方法はいくつもあります。
- シンボリック名を 持たない すべての記憶位置に対する省略時の型を変更するには,SET TYPE コマンドを使用して新しい型を指定できます。
- すべての 記憶位置(シンボリック名を持つものと持たないものの両方)に対して省略時の型を変更するには,SET TYPE/OVERRIDE コマンドを使用して新しい型を指定できます。
- 1 つの EXAMINE コマンドの継続中に特定の記憶位置に現在対応している型を上書きするには,修飾子(/ASCII:n,/BYTE,/TYPE=(name など)を使用することにより新しい型を指定できます。EXAMINE コマンドのほとんどの修飾子は型修飾子です。
デバッガは 2 進数,10 進数,16 進数,8 進数の 4 つの基数のどれか 1 つで整数データを解釈したり表示したりできます。
ほとんどの言語の場合,データの入力と表示のどちらに対しても,省略時の基数は 10 進数です。VAX プロセッサでは,例外は BLISS と MACRO-32 です。この 2 つの省略時の基数は 16 進数です。Alpha プロセッサでは,例外は BLISS と MACRO-32 と MACRO-64 です。この 3 つの省略時の基数は 16 進数です。
EXAMINE コマンドにはデータを他の基数で表示できるようにするための基数修飾子が 4 つあります(/BINARY,/DECIMAL,/HEXADECIMAL,/OCTAL)。SET RADIX コマンドと SET RADIX/OVERRIDE コマンドを使用して,省略時の基数を変更することもできます。
EXAMINE コマンドには,型修飾子と基数修飾子だけでなく,他の用途のための修飾子があります。
- /SOURCE 修飾子を使用すれば,データではなく命令に対応する行番号,ルーチン名,ラベルまたはその他のアドレス式に対応するソース・コードの行を表示できる。
- /[NO]LINE 修飾子と /[NO]SYMBOLIC 修飾子を使用すれば,アドレス式のシンボル化を制御できる。
EXAMINE コマンドは現在の値の組み込みシンボル %CURLOC とピリオド(.)を指定されたアドレス式で示される記憶位置に設定します。論理的先行データ(%PREVLOC またはサーカンフレックス文字(^))と論理的後続データ(%NEXTLOC)は現在の値に基づきます。
/VARIANT 修飾子は,デバッガが匿名バリアントを発見したときに,正しい項目を表示できるようにします。
C プログラムの共用体に含まれているメンバは,個々の時点でいずれか 1 つのみが有効となっています。共用体を表示するとき,デバッガはその時点でどのメンバが有効なのかを知りません。PASCAL プログラムのバリアント部を含んでいるレコードでは,個々の時点でいずれか 1 つのバリアントのみが有効となっています。匿名バリアント部を含んでいるレコードを表示するとき,デバッガはその時点でどのバリアントが有効なのかはわからず,省略時の設定ではすべてのバリアントを表示します。
EXAMINE コマンドの /VARIANT 修飾子を使用すると,共用体(C プログラム)または匿名バリアント(PASCAL プログラム)のどのメンバを表示するかを選択することができます。フォーマットは次のとおりです。
DBG> EXAMINE /VARIANT=variant-selector address-expression
DBG> EXAMINE /VARIANT=(variant-selector,...) address-expression
バリアント選択子の variant-selector は,名前,判別式(PASCAL のみ),または位置を指定します。つまり,以下のいずれかになります。
- NAME = name-string
- DISCRIMINANT = expression
- POSITION = expression
/VARIANT 修飾子はゼロ個以上のバリアント選択子のリストを取ります。省略時の設定では,バリアント選択子なしの /VARIANT となり,すべての匿名バリアント・リストの最初のバリアントが表示されます。
個々のバリアント選択子は,表示するバリアントの名前,判別式,または位置を指定します。
デバッガはバリアント選択子を次のように使用します。
- アドレス式を表示しているときに匿名変数リストに遭遇すると,デバッガはバリアント選択子を使用して,どのバリアントを表示するかを選択します。
- 匿名バリアント・リストに遭遇するたびに,デバッガは次のバリアント選択子を使用して,どのバリアントを表示するかを選択します。バリアント選択子がバリアント・リスト(共用体)のいずれかのバリアントと一致した場合,デバッガはそのバリアントを表示します。
- デバッガは構造体を上から下に,深さ優先で探索するので,子は兄弟よりも前に発見されます。
- 匿名バリアント・リストに遭遇し,それにマッチするバリアント選択子がなかった場合,デバッガは最初のバリアントを表示します。
- バリアント選択子が匿名バリアント・リストのどのバリアントともマッチしなかった場合,デバッガはその旨を示す行を表示します。これは,判別値が判別バリアント・リストのどのバリアントともマッチしなかったときにデバッガが表示する行に似ています。次に例を示します。
[Variant Record omitted - null or illegal Tag Value: 3]
name は名前文字列を指定します。名前がバリアントにマッチするのは,そのバリアントが name によって指定された名前のフィールドを含んでいる場合です。
判別式は,対象とするバリアント部のタグ型と互換性のある型の言語式を指定します。判別式がバリアントにマッチするのは,それがバリアントの case ラベル・リストの中の値に評価される場合です。C と C++ の共用体は判別式を持たないので,判別式は Pascal プログラムにのみ適用されます。
positional-selector は,バリアント・リストの中のバリアントの数を N として,1 から N までの整数に評価される言語式を指定します。I に評価される positional-selector は,I 番目のバリアントを表示するように指定します。
アスタリスク(*)をワイルドカードとして使用すると,匿名バリアント・リストのすべてのバリアントにマッチします。
これらのバリアント選択子は,いずれもすべてのバリアントにマッチするような形で使用することができます。特に,以下に示すバリアント選択子は,最初の匿名バリアント・リストのすべてのバリアントを表示するよう指定します。
/VAR=D=* /VAR=N=* /VAR=P=*
バリアント選択子そのものに,選択子のリストを含めることができます。たとえば,以下のコマンドはいずれも同じ意味を持ちます。
EXAMINE /VARIANT=(DIS=3,DIS=1,DIS=54)x EXAMINE /VARIANT=(DIS=(3,1,54))x EXAMINE /VARIANT=DIS=(3,1,54)x
値が単純な 10 進整数である場合には,1 つの判別式または位置の値を括弧なしで指定することができます。一般的な式を使って値を指定するときには,式を括弧で囲みます。以下のコマンドのリストでは,最初の 4 つのコマンドが有効であるのに対し,最後の 3 つのコマンドは無効です。
EXAMINE /VARIANT=POS=3 EXAMINE /VARIANT=POS=(3) ! parentheses unnecessary EXAMINE /VARIANT=(POS=(3)) ! parentheses unnecessary EXAMINE /VARIANT=(POS=3) ! parentheses unnecessary EXAMINE /VARIANT=(POS=foo) ! parentheses necessary EXAMINE /VARIANT=POS=(foo) ! parentheses necessary EXAMINE /VARIANT=(POS=3-1) ! parentheses necessary
関連コマンド
CANCEL TYPE/OVERRIDE
DEPOSIT
DUMP
EVALUATE
SET MODE [NO]OPERANDS
SET MODE [NO]SYMBOLIC
(SET,SHOW,CANCEL)RADIX
(SET,SHOW)TYPE
#1 |
---|
DBG> EXAMINE COUNT SUB2\COUNT: 27 DBG> |
このコマンドはモジュール SUB2 の整数変数 COUNT の値を表示します。
#2 |
---|
DBG> EXAMINE PART_NUMBER INVENTORY\PART_NUMBER: "LP-3592.6-84" DBG> |
このコマンドは文字列変数 PART_NUMBER の値を表示します。
#3 |
---|
DBG> EXAMINE SUB1\ARR3 SUB1\ARR3 (1,1): 27.01000 (1,2): 31.01000 (1,3): 12.48000 (2,1): 15.08000 (2,2): 22.30000 (2,3): 18.73000 DBG> |
このコマンドはモジュール SUB1 の配列 ARR3 にあるすべての要素の値を表示します。ARR3 は,要素数が 2 x 3 個の実数配列です。
#4 |
---|
DBG> EXAMINE SUB1\ARR3(2,1:3) SUB1\ARR3 (2,1): 15.08000 (2,2): 22.30000 (2,3): 18.73000 DBG> |
このコマンドは,配列 SUB1\ARR3 の配列断面の要素の値を表示します。この配列断面には,"行" 2 の "列" 1 から 3 が含まれます。
#5 |
---|
DBG> EXAMINE VALVES.INTAKE.STATUS MONITOR\VALVES.INTAKE.STATUS: OFF DBG> |
このコマンドはモジュール MONITOR 内のネストされたレコードの構成要素 VALVES.INTAKE.STATUS の値を表示します。
#6 |
---|
DBG> EXAMINE/SOURCE SWAP module MAIN 47: procedure SWAP(X,Y: in out INTEGER)is DBG> |
このコマンドはルーチン SWAP が宣言されているソース行(ルーチン SWAP の記憶位置)を表示します。
#7 |
---|
DBG> DEPOSIT/ASCII:7 WORK+20 = 'abcdefg' DBG> EXAMINE/ASCII:7 WORK+20 DETAT\WORK+20: "abcdefg" DBG> EXAMINE/ASCII:5 WORK+20 DETAT\WORK+20: "abcde" DBG> |
この例では,DEPOSIT コマンドは要素 'abcdefg' を 7 バイト長の ASCII 文字列としてシンボル WORK で示される記憶位置から 20 バイト先の記憶位置に格納します。最初の EXAMINE コマンドはその記憶位置にある要素の値を 7 バイト長の ASCII 文字列(abcdefg)として表示します。2 番目の EXAMINE コマンドはその記憶位置の要素の値を 5 バイト長の ASCII 文字列(abced)として表示します。
#8 |
---|
DBG> EXAMINE/OPERANDS=FULL .0\%PC X\X$START+0C: MOVL B^04(R4),R7 B^04(R4) R4 contains X\X$START\M(address 00001054), B^04(00001054)evaluates to X\X$START\K (address 00001058), which contains 00000016 R7 R7 contains 00000000 DBG> |
VAX システムでは,このコマンドは現在の PC 値での命令(MOVL)を表示します。/OPERANDS=FULL を使用すると,オペランド情報の最大レベルが表示されます。
#9 |
---|
DBG> SET RADIX HEXADECIMAL DBG> EVALUATE/ADDRESS WORKDATA 0000086F DBG> EXAMINE/SYMBOLIC 0000086F MOD3\WORKDATA: 03020100 DBG> EXAMINE/NOSYMBOLIC 0000086F 0000086F: 03020100 DBG> |
この例では,EVALUATE/ADDRESS コマンドは変数 WORKDATA のメモリ・アドレスが 16 進数の 0000086F であることを示します。2 つの EXAMINE コマンドはアドレスを WORKDATA にシンボル化するかどうかを制御するために,/[NO]SYMBOLIC を使用してそのアドレスに含まれている値を表示します。
#10 |
---|
DBG> EXAMINE/HEX FIDBLK FDEX1$MAIN\FIDBLK (1): 00000008 (2): 00000100 (3): 000000AB DBG> |
このコマンドは 16 進基数で配列変数 FIDBLK の値を表示します。
#11 |
---|
DBG> EXAMINE/DECIMAL/WORD NEWDATA:NEWDATA+6 SUB2\NEWDATA: 256 SUB2\NEWDATA+2: 770 SUB2\NEWDATA+4: 1284 SUB2\NEWDATA+6: 1798 DBG> |
このコマンドは NEWDATA から NEWDATA + 6 バイトで示される記憶位置の範囲内にあるワード整数要素(2 バイト要素)の値を 10 進基数で表示します。
#12 |
---|
DBG> EXAMINE/TASK SORT_INPUT MOD3\SORT_INPUT: %TASK 12 DBG> |
このコマンドは SORT_INPUT という名前のタスク・オブジェクトのタスク ID を表示します。
#13 |
---|
DBG> EXAMINE /VARIANT=(NAME=m,DIS=4,POS=1)x |
このコマンドは,最初に遭遇した匿名バリアント・リストについては "m" という名前のフィールドを含んでいるバリアント部を表示し,2 番目の匿名バリアント・リストについては判別式の値が 4 の部分を表示し,3 番目の匿名バリアント・リストについては最初のバリアント部を表示します。
デバッグ・セッションを終了するか,またはマルチプロセス・プログラムの 1 つまたは複数のプロセスを終了し,アプリケーション宣言終了ハンドラを実行できるようにします。コマンド・プロシージャまたは DO 句の中で使用し,プロセスを全く指定しないと,その時点でそのコマンド・プロシージャまたは DO 句が終了されます。
EXIT [process-spec[,...]]
process-spec
現在デバッガの制御下にあるプロセスを指定します。次のいずれかの形式で指定します。
[%PROCESS_NAME]process-name スペースや小文字を含まないプロセス名。プロセス名にはワイルドカード文字(*)を含めることができる。 [%PROCESS_NAME] "process-name" スペースまたは小文字を含むプロセス名。二重引用符(")の代わりに,一重引用符を(')使用することもできる。 %PROCESS_PIDprocess_id プロセス識別子(PID,16 進数)。 [%PROCESS_NUMBER]process-number
(または %PROCprocess-number)デバッガの制御下に入ったときにプロセスに割り当てられた番号。新しい番号は,1 から順番に各プロセスに割り当てられる。EXIT コマンドまたは QUIT コマンドによってプロセスが終了しても,そのデバッグ・セッション中はその番号は再割り当てできる。プロセス番号は SHOW PROCESS コマンドの実行で表示される。プロセスは,組み込みシンボル %PREVIOUS_PROCESS および %NEXT_PROCESS によってインデックスづけできるように,循環リスト内に順序づけされる。 process-group-name DEFINE/PROCESS_GROUP コマンドで定義された,プロセスのグループを表すシンボル。 %NEXT_PROCESS デバッガの循環プロセス・リスト中で可視プロセスの次のプロセス。 %PREVIOUS_PROCESS デバッガの循環プロセス・リスト中で可視プロセスの前のプロセス。 %VISIBLE_PROCESS シンボル,レジスタ値,ルーチン呼び出し,ブレークポイントなどの検索時に現在のコンテキストになっているスタック,レジスタ・セット,およびイメージを持つプロセス。
すべてのプロセスを指定するためにワイルドカード文字のアスタリスク(*)を使用することもできます。
EXIT コマンドはプログラムを実行するために使用できる 4 つのデバッガ・コマンドのうちの 1 つです(他の 3 つは CALL,GO,STEP です)。デバッグ・セッションを終了するには,パラメータを全く指定しないでデバッガ・プロンプトに対し EXIT コマンドを入力します。これによりセッションが順序正しく終了されます。つまり,プログラムのアプリケーション宣言終了ハンドラ(もしあれば)が実行され,次にデバッガの終了ハンドラが実行され(ログ・ファイルをクローズし,画面とキーパッドの状態を復元するなど),制御がコマンド・インタプリタに戻ります。そのあとは DCL コマンドの DEBUG や CONTINUE を入力してもプログラムのデバッグを続けることはできません(デバッガを再起動する必要があります)。
EXIT は任意のアプリケーション宣言終了ハンドラを実行するので,該当する終了ハンドラにブレークポイントを設定することができます。設定したブレークポイントはEXIT と入力すると検出されます。したがって,EXIT を使用して終了ハンドラをデバッグできます。
アプリケーション宣言終了ハンドラを実行しないでデバッグ・セッションを終了するには,EXIT の代わりに QUIT コマンドを使用します。
コマンド・プロシージャや DO 句での EXIT コマンドの使用
デバッガがコマンド・プロシージャの中で(パラメータを全く指定しないで)EXIT コマンドを実行すると,制御はそのコマンド・プロシージャを起動したコマンド・ストリームに戻ります。コマンド・ストリームは,端末,外側(当該コマンド・プロシージャを含んでいる側)のコマンド・プロシージャ,コマンドまたは画面表示定義での DO 句とすることができます。たとえば,コマンド・プロシージャが DO 句の中から起動された場合には,制御はその DO 句に戻り,そこでデバッガは(コマンド・シーケンスの中にあれば)次のコマンドを実行します。
デバッガは,DO 句の中で(パラメータを全く指定しないで)EXIT コマンドを実行すると,その句にある残りのコマンドは無視し,プロンプトを表示します。
マルチプロセス・プログラムをデバッグする場合,EXIT コマンドを使用すればデバッグ・セッションを終了せずに,指定したプロセスを終了できます。プロンプトに対して EXIT コマンドを入力するか,それともコマンド・プロシージャまたは DO 句の中で EXIT コマンドを使用するかにかかわらず,同じ方法と動作が適用されます。
1 つまたは複数のプロセスを終了するには,それらのプロセスをパラメータとして指定して EXIT コマンドを入力します。この結果,指定されたプロセスのイメージが順序正しく終了され,それらのイメージに対応するアプリケーション宣言終了ハンドラが実行されます。その後は,指定したプロセスは SHOW PROCESS/ALL コマンドを実行しても表示されなくなります。SET PROCESS コマンドの結果,指定したプロセスの中に保留状態だったものがある場合,保留状態は無視されます。
指定したプロセスが終了処理を開始すると,保留されていない未指定のプロセスが実行を開始します。実行が開始されると,その実行がどのように継続されるかはユーザが SET MODE [NO]INTERRUPT コマンドを入力したかどうかによって異なります。省略時の設定(SET MODE INTERRUPT)では,実行はプロセスのどれかで中断されるまで継続します。中断された時点で,イメージを実行していた他のどれかのプロセスで割り込みがかかり,デバッガが入力を促します。
アプリケーション宣言終了ハンドラを実行したり,別の方法で実行を開始したりしないで指定のプロセスを終了するには,EXIT コマンドではなく QUIT コマンドを使用します。
関連コマンド
DISCONNECT
@(実行プロシージャ)
Ctrl/C
Ctrl/Y
Ctrl/Z
QUIT
RERUN
RUN
SET ABORT_KEY
SET MODE [NO]INTERRUPT
SET PROCESS
#1 |
---|
DBG> EXIT $ |
このコマンドはデバッグ・セッションを終了し,DCL レベルに戻ります。
#2 |
---|
all> EXIT %NEXT_PROCESS, JONES_3, %PROC 5 all> |
このコマンドを実行すると,マルチプロセス・プログラムの 3 つのプロセスが順序正しく終了します。つまり,プロセス・リスト内の可視プロセスの次のプロセス,プロセス JONES_3,プロセス 5 が終了します。指定されたプロセスが終了したあと,制御はデバッガに戻ります。
前へ | 次へ | 目次 | 索引 |