Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


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


付録 C
各言語に対するデバッガ・サポートの要約

VAX プロセッサでは,次の各 Compq 言語で記述されたプログラムに対してデバッガを使用することができます。

Ada BASIC BLISS C
C++ COBOL DIBOL Fortran
MACRO-32 Pascal PL/I RPG II
SCAN      

Alpha プロセッサでは,次の各 Compaq 言語で記述されたプログラムに対してデバッガを使用することができます。

Ada BASIC BLISS C
C++ COBOL Fortran MACRO-321
MACRO-64 Pascal PL/I  


1MACRO-32 は AMACRO コンパイラでコンパイルしなければなりません。

C.1 概要

デバッガは,各言語の構文,データ型,有効範囲規則を認識します。また,各言語の演算子および式の構文も認識します。したがって,デバッガ・コマンドを使用するときは,変数やその他のプログラム要素をプログラムのソース・コードに記述する場合と同じように指定することができます。また,その言語の構文を使用してソース言語の式の値を計算することもできます。

サポートされている言語のほとんどに共通するデバッグ方法については,マニュアルで説明しています。ヘルプ・トピックには各言語に固有の次の内容が含まれています。

言語固有のデバッガのサポートについての詳しい説明は,各言語とともに提供されるドキュメントを参照してください。

プログラムが複数の言語で記述されている場合,デバッグ・セッションの途中でデバッグ・コンテキストを 1 つの言語から別の言語へ変更することができます。選択する言語に対応したキーワードを指定して,SET LANGUAGE コマンドを使用してください。

VAX プロセッサでは,次のキーワードの 1 つを指定することができます。

ADA BASIC BLISS C
C++ COBOL DIBOL FORTRAN
MACRO PASCAL PLI RPG
SCAN UNKNOWN    

Alpha プロセッサでは,次のキーワードの 1 つを指定することができます。

ADA AMACRO BASIC BLISS
C C++ COBOL FORTRAN
MACRO MACRO64 PASCAL UNKNOWN

サポートされていない言語で記述されたプログラムをデバッグするときは,SET LANGUAGE UNKNOWN コマンドを入力します。サポートされていない言語でのデバッガの使用性を最大限に高めるため,この設定によってデバッガはデータ形式と演算子のセットを幅広く受け入れるようになります。この中には,サポートされている言語のうち,2,3 の言語だけに固有のデータ形式と演算子も含まれます。言語が UNKNOWN に設定されているときにデバッガが認識する演算子と構造についての詳しい説明は,オンライン・ヘルプの Language_UNKNOWN を参照してください。

C.2 Ada

次の各サブトピックではデバッガによる Ada のサポートについて説明します。Ada のタスキング・プログラムに固有の情報については,第 17 章 も参照してください。

C.2.1 Adaの名前とシンボル

次の各サブトピックでは,デバッガがサポートしている Ada の名前,シンボル,および定義済みの属性について説明します。

名前の一部分は言語式(たとえば,'FIRST や 'POS といった属性)である場合があるので注意してください。このことは,EXAMINE,EVALUATE,DEPOSIT の各コマンドでこれらの名前を使用する方法に影響します。列挙型の例については,オンライン・ヘルプの Specifying_Attributes_with_Enumeration_Types を参照してください。

C.2.1.1 Adaの名前

サポートされている Ada の名前を次に示します。

名前の種類 デバッガのサポート
レキシカル要素 Ada の識別子の構文規則を完全にサポートしている。

識別子ではなく演算子のシンボル(たとえば,+ や *)である関数の名前には,接頭辞 %NAME を付ける必要がある。また,演算子のシンボルは二重引用符で囲まなければならない。

数値リテラル,文字リテラル,文字列リテラル,予約語についての Ada の規則を完全にサポートしている。

-2147483648 から 2147483647 までの範囲で,符号付き整数リテラルを受け入れる。

コンテキストとアーキテクチュアに応じて浮動小数点数型を,F 浮動小数点数型,D 浮動小数点数型,G 浮動小数点数型,H 浮動小数点数型,S 浮動小数点型,または T 浮動小数点数型と解釈する。

添字付き要素 完全にサポートしている。
断面 断面全体,または断面の添字付き要素を確認および評価することができる。

断面の添字付き要素の格納だけができる。断面全体の格納はできない。

選択要素 .allall キーワードの使用も含めて,完全にサポートしている。
リテラル null キーワードも含めて,完全にサポートしている。
ブール・シンボル 完全にサポートしている(TRUE,FALSE)。
集合体 EXAMINE コマンドでレコード全体および配列のオブジェクトを確認することができる。配列またはレコードの構成要素に値を格納することができる。文字列の値を格納する場合を除き,DEPOSIT コマンドで集合体を使用することはできない。


前へ 次へ 目次 索引