[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

B 組み込みシンボルと論理名

この付録では,デバッガのすべての組み込みシンボルと論理名を示します。

B.1 SS$_DEBUG条件

SS$_DEBUG (SYS$LIBRARY:STARLET.OLBで定義される)は,プログラムからデバッガを起動するようにシグナル通知する場合の条件です。 プログラムからSS$_DEBUG をシグナル通知するのは,Ctrl/Yを押したあとにDCLコマンドDEBUG を入力することと同じです。

コマンドをSS$_DEBUGとともにシグナル通知して,デバッガにコマンドを渡すことができます。 デバッガに実行させたいコマンドの形式は,DBG>プロンプトに対して入力するコマンドの形式と同じにしてください。 複数のコマンドを指定する場合は, セミコロンで区切らなければなりません。また, コマンドはASCIC文字列として参照渡しで渡さなければなりません。 ASCIC文字列を作成する方法についての詳しい説明は,各言語のドキュメントを参照してください。

たとえば,プログラムのある地点でデバッガを起動してSHOW CALLSコマンドを入力するには, 次のコードをプログラムに挿入します(BLISSの例)。

     LIB$SIGNAL(SS$_DEBUG, 1, UPLIT BYTE(%ASCIC 'SHOW CALLS'));

SS$_DEBUGの定義は,言語によりSTARLETファイルまたはSYSDEFファイル( たとえば,BLISSのSTARLET.L32,またはFortranのFORSYSDEF.TLB) からコンパイルするときに得ることができます。また,リンク時にSYS$LIBRARY:STARLET.OLB からSS$_DEBUGの定義を得ることもできますが, この方法はなるべく使用しないでください。

B.2 論理名

デバッガ固有の論理名を次の表に示します。

論理名 機能
DBG$DECW$DISPLAY DECwindows Motifを実行しているワークステーションにだけ適用される。 デバッガ・インタフェース(DECwindows Motif またはコマンド)またはディスプレイ装置を指定する。 省略時の設定: DBG$DECW$DISPLAYは未定義であるか,またはアプリケーション単位の論理名DECW$DISPLAY 定義と同じ定義である。 DECwindows Motif環境でデバッガの省略時のインタフェースを変更するために,DBG$DECW$DISPLAY を使用する方法については,第9.7.3項を参照。
DBG$IMAGE_DSF_PATH (Alphaのみ)デバッグするイメージの.DSF ( デバッグ・シンボル・テーブル)ファイルを格納するディレクトリを指定する。 各.DSFファイルのファイル名は,デバッグするイメージのファイル名と同じでなければならない。.DSF ファイルの作成の詳細については, 第5.1.5項を参照。
DBG$INIT デバッガの初期化ファイルを指定する。 省略時の設定では,デバッガの初期化ファイルはない。DBG$INIT は,検索リストだけでなく,ファイルの完全指定でも部分指定でもよい。 デバッガの初期化ファイルについての詳しい説明は, 第13.2節を参照。
DBG$INPUT デバッガの入力装置を指定する。省略時の設定はSYS$INPUT である。DBG$INPUTとDBG$OUTPUTを使用して2つの端末で画面用プログラムをデバッグする方法についての詳しい説明は, 第14.2節を参照。

DBG$INPUTはDECwindows Motifインタフェースでは無視される(DBG$DECW$DI SPLAY を参照)。DECtermウィンドウでデバッガのコマンド・ インタフェースを表示中であれば,DBG$INPUTを使用できる。

DBG$OUTPUT デバッガの出力装置を指定する。 省略時の設定はSYS$OUTPUTである。DBG$INPUTとDBG$OUTPUTを使用して2 つの端末で画面用プログラムをデバッグする方法については,第14.2節を参照。

DECwindows MotifインタフェースではDBG$OUTPUTは無視される(DBG$DECW$DISPLAY を参照)。DECtermウィンドウでデバッガのコマンド・ インタフェースを表示中であれば,DBG$OUTPUTを使用できる。

DBG$PROCESS デバッグ構成( 省略時の設定またはマルチプロセス)を指定する。省略時の設定では,DBG$PROCESS は未定義である。DBG$PROCESSを使用してデバッグ構成を指定する方法についての詳しい説明は, 第15.3.1項を参照。
SSI$AUTO_ ACTIVATE (Alphaのみ)システム・サービス・インターセプション(SSI) が有効であるかどうか指定する。ウォッチポイントで問題がある場合は, 次のDCLコマンドを入力し,SSIを無効にする。
       $DEFINE SSI$AUTO_ACTIVATE OFF
静的ウォッチポイント,AST,システム・サービス・インターセプションの相互関係については,SET WATCH の説明 を参照。

論理名に値を割り当てるには,DCLコマンドDEFINEまたはASSIGNを使用します。 たとえば,次のコマンドは,デバッガの初期化ファイルの記憶位置を指定します。

     $ DEFINE DBG$INIT DISK$:[JONES.COMFILES]DEBUGINIT.COM

論理名DBG$INPUTについては,次の点に注意してください。ファイル(たとえばPROG_IN.DAT) から入力を得るプログラムおよび,端末からデバッガ入力を得るプログラムをデバッグする場合は, 次のように定義してから,デバッガを起動しなければなりません。

     $ DEFINE SYS$INPUT PROG_IN.DAT
     $ DEFINE/PROCESS DBG$INPUT 'F$LOGICAL("SYS$COMMAND")

すなわち,SYS$COMMANDの変換を指すようにDBG$INPUTを定義します。 SYS$COMMANDを指すようにDBG$INPUTを定義すると,デバッガはPROG_ IN.DATファイルから入力を得ようとします。

B.3 組み込みシンボル

デバッガの組み込みシンボルは,プログラムの要素と値を指定するオプションです。

デバッガのほとんどの組み込みシンボルには,パーセント記号接頭辞(%) があります。

この付録では,次のシンボルについて説明します。

B.3.1 レジスタの指定

VAXレジスタまたはAlphaレジスタのデバッガ組み込みシンボルは,レジスタ名の前にパーセント記号(%) がついたものです。レジスタ・シンボルを指定する場合, 同じ名前のシンボルをプログラムが宣言していなければパーセント記号(%) を前につける必要はありません。表 B-1 に,VAXレジスタ・シンボルを示します。

表 B-1 VAXレジスタのデバッガ・シンボル(VAXのみ)

シンボル 機能
VAX汎用レジスタ
%R0 . . . %R11 汎用レジスタ(R0 . . . R11)
%AP (%R12) 引数ポインタ(AP)
%FP (%R13) フレーム・ ポインタ(FP)
%SP (%R14) スタック・ポインタ(SP)
%PC (%R15) プログラム・カウンタ(PC)
%PSL プロセッサ・ステータス・ロングワード(PSL)
VAXベクタ・ レジスタとベクタ制御レジスタ
%V0 . . . %V15 ベクタ・レジスタV0 . . . V15
%VCR ベクタ数レジスタ
%VLR ベクタ長レジスタ
%VMR ベクタ・マスク・レジスタ

すべてのレジスタの内容を検査できます。また,SPを除くすべてのレジスタに値を格納することもできます。 ただし,FPに値を格納するときは注意してください。

VAX汎用レジスタについての詳しい説明は,第4.4 節第4.4.1項を参照してください。 また,VAX ベクタ・レジスタについての詳しい説明は,第16章を参照してください。

表 B-2にAlphaレジスタ・シンボルを示します。

表 B-2 Alphaレジスタのデバッガ・シンボル(Alpha のみ)

シンボル 機能
Alpha整数レジスタ
%R0 . . . %R28 レジスタR0 . . . R28
%FP (%R29) スタック・ フレーム基底レジスタ(FP)
%SP (%R30) スタック・ポインタ(SP)
%R31 ReadAsZero/Sink (RZ)
%PC プログラム・カウンタ(PC)
%PS プロセッサ・ ステータス・レジスタ(PS)。組み込みシンボル%PSLと%PSWはAlphaプロセッサでは使用できない。
Alpha浮動小数点レジスタ
%F0 . . . %F30 レジスタF0 . . . F30
%F31 ReadAsZero/Sink

Alphaプロセッサの場合

Alpha汎用レジスタについての詳しい説明は,第4.4 節第4.4.2項を参照してください。

B.3.2 識別子の作成

組み込みシンボル%NAMEを使用すると,現在の言語では通常は使用できない識別子を作成できます。 この場合の構文は次のとおりです。

     %NAME 'character-string'

次の例では,'12'という名前の変数を調べます。

     DBG> EXAMINE %NAME '12'

次の例では,コンパイラ生成ラベルP.AAAを調べます。

     DBG> EXAMINE %NAME 'P.AAA'

B.3.3 コマンド・プロシージャに渡されるパラメータの数

組み込みシンボル%PARCNTは,指定する実パラメータの個数が一定でないコマンド・ プロシージャで使用します。%PARCNTはデバッガ・コマンド・ プロシージャ内だけで定義されます。

%PARCNTは,現在のコマンド・プロシージャに渡される実パラメータの数を指定します。 次の例では,コマンド・プロシージャABC.COMが起動され,3 つのパラメータが渡されます。

     DBG> @ABC 111,222,333

ABC.COMでは,%PARCNTの値は現在3です。この%PARCNTはABC.COMに渡された各パラメータ値を得るためのループ・ カウンタとして使用されます。

     DBG> FOR I = 1 TO %PARCNT DO (DECLARE X:VALUE; EVALUATE X)

B.3.4 デバッガ・インタフェース(コマンドまたはDECwindows Motif) の決定

組み込みシンボル%DECWINDOWSを使用すると,デバッガのDECwindows Motifインタフェースが表示されるのかコマンド・インタフェースが表示されるのかを決定できます。DECwindows Motif インタフェースを使用していれば,%DECWINDOWS の値は1 (TRUE)です。コマンド・インタフェースを使用していれば,%DECWINDOWS の値は0 (FALSE)です。次に例を示します。

     DBG> EVALUATE %DECWINDOWS
     0

次の例は,デバッガの初期化ファイル内で%DECWINDOWSを使用して,デバッガの起動時にデバッガ・ ソース・ウィンドウSRCの位置決めする方法を示します。

     IF %DECWINDOWS THEN
           ! DECwindows Motif (ワークステーション) 構文:
           (DISPLAY SRC AT (100,300,100,700))
        ELSE
           ! 画面モード (端末) 構文:
           (DISPLAY SRC AT (AT H1))

B.3.5 入力基数の制御

組み込みシンボル%BIN,%DEC,%HEX,%OCTは,アドレス式と言語式内で, そのあとに続く整数リテラル,またはそのあとの括弧で囲まれた式の中にあるすべての整数リテラルをそれぞれ,2 進基数,10進基数,16進基数,8 進基数と解釈することを指定するのに使用します。ただし,これらの基数組み込みシンボルは, 必ず整数リテラルとともに使用しなければなりません。 次に例を示します。

     DBG> EVALUATE/DEC %HEX 10
     16
     DBG> EVALUATE/DEC %HEX (10 + 10)
     32
     DBG> EVALUATE/DEC %BIN 10
     2
     DBG> EVALUATE/DEC %OCT (10 + 10)
     16
     DBG> EVALUATE/HEX %DEC 10
     0A
     DBG> SET RADIX DECIMAL
     DBG> EVALUATE %HEX 20 + 33 ! 20 を 16 進数として,33 を 10 進数として扱う
     65                         ! 結果として得られる値は 10 進数である
     DBG> EVALUATE %HEX (20+33) ! 20 と 33 の両方を 16 進数として扱う
     83
     DBG> EVALUATE %HEX (20+ %OCT 10 +33) ! 20 と 33 を 16 進数として,
     91                                   ! 10 を 8 進数として扱う
     DBG> SYMBOLIZE %HEX 27C9E3  ! 16 進アドレスをシンボル化する
     DBG> DEPOSIT/INST %HEX 5432 = 'MOVL ^O%DEC 222, R1'
     DBG> ! アドレス 5432 を 16 進数として,オペランド 222 を10 進数として扱う

B.3.6 プログラム記憶位置と要素の現在値の指定

次の組み込みシンボルを使用すると,プログラム記憶位置と要素の現在値を指定できます。

シンボル 機能
%CURLOC
.(ピリオド)
現在の論理要素-EXAMINEコマンド,DEPOSIT コマンドまたはEVALUATE/ADDRESSコマンドによって最後に参照されたプログラム記憶位置。
%NEXTLOC
Returnキー
現在の要素の論理的後続データ-EXAMINEコマンド,DEPOSIT コマンド,またはEVALUATE/ADDRESSコマンドによって最後に参照された記憶位置の論理的に続くプログラム記憶位置。Return キーはコマンド終了文字なので, これはコマンド終了文字を指定できる場所(たとえばEXAMINE の直後,ただしDEPOSITまたはEVALUATE/ADDRESSの直後ではいけない) だけで使用できる。
%PREVLOC
^(サーカンフレックス)
現在の要素の論理的先行データ-EXAMINE コマンド,DEPOSITコマンドまたはEVALUATE/ADDRESSコマンドによって最後に参照された記憶位置の論理的に前にあるプログラム記憶位置。
%CURVAL
\ (バックスラッシュ)
EVALUATEコマンドまたはEXAMINE コマンドによって最後に表示されたかDEPOSITコマンドによって最後に格納された値。 この2つのシンボルは,EVALUATE/ADDRESSコマンドの影響を受けない。

次の例では,WIDTH変数を調べます。次に,値12を,現在の記憶位置(WIDTH) に格納します。これは,現在の記憶位置を確認することによって調べます。

     DBG> EXAMINE WIDTH
     MOD\WIDTH: 7
     DBG> DEPOSIT . = 12
     DBG> EXAMINE .
     MOD\WIDTH: 12
     DBG> EXAMINE %CURLOC
     MOD\WIDTH: 12
     DBG>

次の例では,配列内で次の記憶位置と前にある記憶位置を調べます。

     DBG> EXAMINE PRIMES(4)
     MOD\PRIMES(4): 7
     DBG> EXAMINE %NEXTLOC
     MOD\PRIMES(5): 11
     DBG> EXAMINE <Return>    ! 次の記憶位置を調べる
     MOD\PRIMES(6): 13
     DBG> EXAMINE %PREVLOC
     MOD\PRIMES(5): 11
     DBG> EXAMINE ^
     MOD\PRIMES(4): 7
     DBG>

すべての場合に,Returnキーを使用して論理的後続データを示すことができるとはかぎりません。 たとえば,次の記憶位置を示すにはシンボル%NEXTLOC を使用しますが,その目的でDEPOSITコマンドの入力後にReturn キーを押すことはできません。

B.3.7 アドレス式におけるシンボルと演算子の使用方法

アドレス式で使用できるシンボルと演算子を次に示します。単項演算子のオペランドは1 つです。二項演算子のオペランドは2つです。

シンボル 機能
%LABEL 後続の数値リテラルがプログラム・ラベル(Fortran などのように数値のプログラム・ラベルを持っている言語の場合) であることを指定する。含んでいるモジュールを指定するパス名接頭識別子をラベルにつけることができる。
%LINE 後続の数値リテラルがプログラム内の行番号であることを指定する。 含んでいるモジュールを指定するパス名接頭識別子を行番号につけることができる。
バックスラッシュ(\) パス名内で使用すると,パス名の各要素を区切る。 この場合,完全パス名の一番左の要素がバックスラッシュであってはならない。

シンボルの接頭辞として使用する場合,シンボルをグローバル・シンボルと解釈することを指定する。 この場合,バックスラッシュはシンボルの完全パス名の一番左の要素でなければならない。

アットマーク(@)
ピリオド(.)
単項演算子。アドレス式では,アットマーク(@) とピリオド(.)はどちらも"内容"演算子として機能する。"内容" 演算子を使用すると,そのオペランドはメモリ・アドレスと解釈され, そのアドレスの内容(そこにある値)を指す。
ビット・フィールド<p,s,e> 単項演算子。 ビット・フィールド選択をアドレス式に適用できる。ビット・フィールドを選択するには, ビット・オフセット(p),ビット長(s),符号拡張ビット(e) を指定する(省略可能)。
+記号(+) 単項演算子または二項演算子。単項演算子の場合, オペランドの値そのものを示す。二項演算子の場合,先行オペランドと後続オペランドの両方を加算する。
- 記号(-) 単項演算子または二項演算子。単項演算子の場合, オペランドの値の否定を示す。二項演算子の場合,先行オペランドから後続オペランドを減算する。
乗算記号(*) 二項演算子。先行オペランドに後続オペランドを掛ける。
除算記号(/) 二項演算子。先行オペランドを後続オペランドで割る。

次に,アドレス式での組み込みシンボルと演算子の使い方の例を示します。

%LINE演算子と%LABEL演算子

次のコマンドは,現在実行が中断しているモジュールの行26にトレースポイントを設定します。

     DBG> SET TRACE %LINE 26

次のコマンドは,行47のソース行を表示します。

     DBG> EXAMINE/SOURCE %LINE 47
     module MAIN
         47:  procedure SWAP(X,Y: in out INTEGER) is
     DBG>

次のコマンドは,MOD4モジュールのラベル10にブレークポイントを設定します。

     DBG> SET BREAK MOD4\%LABEL 10

パス名演算子

次のコマンドは,MOD4モジュールのROUT2ルーチンで宣言されたCOUNT変数の値を表示します。 バックスラッシュ(\)パス名区切り文字でパス名要素を区切ります。

     DBG> EXAMINE MOD4\ROUT2\COUNT
     MOD4\ROUT2\COUNT: 12
     DBG>

次のコマンドは,QUEUMANモジュールの行26にブレークポイントを設定します。

     DBG> SET BREAK QUEUMAN\%LINE 26

次のコマンドはグローバル・シンボルXの値を表示します。

     DBG> EXAMINE \X

算術演算子

デバッガがアドレス式の要素を評価する順番は,ほとんどのプログラミング言語で使用される順番と似ています。 この順番は,次の3つの要素によって決まります。 優先順位が最も高いものから順に並んでいます。

  1. 演算子ごとにオペランドをまとめるために使用する区切り文字。 通常は括弧または大括弧。

  2. 各演算子の相対優先順位。

  3. 演算子間の優先順位。左側の演算子ほど高い。

次にデバッガ演算子を,優先順位が最も高いものから順に示します。

  1. 単項演算子(.,@,+,-)

  2. 乗算演算子と除算演算子(*,/)

  3. 加算演算子と減算演算子(+,-)

たとえば,次の式を評価する場合,デバッガはまず括弧内のオペランドを加算し, 次にその結果を4で割り,次に5からその結果を引きます。

     5--(T+5)/4

次のコマンドは,メモリ記憶位置X + 4バイトに含まれている値を表示します。 X + 4 bytes:

     DBG> EXAMINE X + 4

内容演算子

次に,内容演算子の使い方を示します。最初の例は,現在のPC値が指す命令( アドレスがPCに含まれており,実行されようとしている命令)が得られます。

     DBG> EXAMINE .%PC
     MOD\%LINE 5: PUSHL   S^#8
     DBG>

次の例では,呼び出しスタックの1レベル下にあるPC値が指すソース行が得られます(SWAP ルーチンを呼び出したとき)。

     DBG> EXAMINE/SOURCE .1\%PC
     module MAIN
     MAIN\%LINE 134:     SWAP(X,Y);
     DBG>

次の例では,ポインタ変数PTRの値が16進数7FF00000であり,検査しようとしている要素のアドレスです。 また,この要素の値は16進数の3FF00000 です。次のコマンドは,この要素を検査する方法を示します。

     DBG> EXAMINE/LONG .PTR
     7FF00000: 3FF00000
     DBG>

次の例では,内容演算子(アットマークまたはピリオド)と現在の記憶位置演算子( ピリオド)を使用して,3つのクォドワード整数ポインタ変数がリンクされたリスト( 次の図のL1,L2,L3)を検査します。Pはリストの開始点へのポインタです。 各ポインタ変数の上の方のロングワードには次の変数のアドレスが入り, 下の方のロングワードには整数値(それぞれ8,6, 12)が入っています。

     DBG> SET TYPE QUADWORD; SET RADIX HEX
     DBG> EXAMINE .P
                                  ! アドレスが P に入っている要素を
                                  ! 検査する。
     00009BC2: 00000008 00009BDA  ! 高位のワードには値 8 が,低位のワードには
                                  ! 次の要素のアドレス (9BDA) が入っている。

     DBG> EXAMINE @.              ! アドレスが現在の
                                  ! 要素に入っている要素を検査する。
     00009BDA: 00000006 00009BF4  ! 高位のワードには値 6 が,低位のワードには
                                  ! 次の要素のアドレス (9BF4) が入っている。

     DBG> EXAMINE ..              ! アドレスが現在の
                                  ! 要素に入っている要素を検査する。
     00009BF4: 0000000C 00000000  ! 高位のワードには値 12 (10 進数) が,低位の
                                  ! ワードにはアドレス 0(リストの終わり) が入っている。

ビット・フィールド演算子

次の例は,ビット・フィールド演算子の使い方を示しています。たとえば, ビット3で始まり,長さが4ビット,符号拡張子がないアドレス式X_NAME を検査するには,次のコマンドを入力します。

     DBG> EXAMINE X_NAME <3,4,0>

B.3.8 例外情報の入手

次の組み込みシンボルを使用すると,現在の例外についての情報を入手したり, その情報を使用してブレークポイントまたはトレースポイントを修飾したりできます。

シンボル 機能
%EXC_FACILITY 現在の例外を発生させたファシリティの名前
%EXC_NAME 現在の例外の名前
%ADAEXC_NAME 現在の例外のAda例外名(Adaプログラム専用)
%EXC_NUMBER 現在の例外の番号
%EXC_SEVERITY 現在の例外の重大度コード

次に例を示します。

     DBG> EVALUATE %EXC_NAME
     "FLTDIV_F"
     DBG> SET BREAK/EXCEPTION WHEN (%EXC_NAME = "FLTDIV_F")
        .
        .
        .
     DBG> EVALUATE %EXC_NUMBER
     12
     DBG> EVALUATE/CONDITION_VALUE %EXC_NUMBER
     %SYSTEM-F-ACCVIO, access violation at PC !XL, virtual address !XL
     DBG> SET BREAK/EXCEPTION WHEN (%EXC_NUMBER = 12)

WHEN句の条件式は,言語によって異なります。

B.3.9 呼び出しスタック上の現在の有効範囲, 次の有効範囲,前の有効範囲の指定

次の組み込みシンボルを使用すると,シンボル検索の有効範囲およびルーチン呼び出しスタックに関するソース表示と機械語命令ディスプレイの有効範囲を入手し, 操作することができます。

組み込みシンボル 機能
%CURRENT_SCOPE_ENTRY ソース・コードまたはデコードした命令を表示するときか, シンボルを検索するときに,デバッガが参照用に現在使用している呼び出しフレーム。 省略時の設定は, 呼び出しフレーム0である。
%NEXT_SCOPE_ ENTRY 呼び出しスタックで,%CURRENT_SCOPE_ENTRYが示す呼び出しフレームの下にある次の呼び出しフレーム。
%PREVIOUS_SCOPE_ENTRY 呼び出しスタックで,%CURRENT_SCOPE_ENTRY が示す呼び出しフレームの上にある次の呼び出しフレーム。

これらのシンボルは,呼び出しスタック上の呼び出しフレームを示す整数値を返します。 呼び出しフレーム0は,スタックの一番上にあるルーチンを示します。 ここで実行が中断されています。呼び出しフレーム1は呼び出しルーチンを示します。

たとえば,次のコマンドは,デバッガが呼び出しスタックの1つ下のルーチンが示す有効範囲で始まるシンボル( 呼び出しスタックの一番上にあるルーチンから始まるのではない) を検索することを指定します。

     DBG> SET SCOPE/CURRENT %NEXT_SCOPE_ENTRY


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]