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

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

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


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



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


Ada BASIC BLISS C
C++ COBOL Fortran MACRO- 32[1]
MACRO-64 Pascal PL/I

[1] MACRO-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コマンドで集合体を使用することはできない。

C.2.1.2 定義済みの属性

サポートされているAdaの定義済みの属性を次に示します。デバッガのSHOW SYMBOL/TYPE コマンドで得られる情報は,属性P'FIRST,P'LAST, P'LENGTH,P'SIZE,およびP'CONSTRAINEDによって得られる情報と同じですので注意してください。

属性 デバッガのサポート
P'CONSTRAINED 接頭辞Pが,判別子の付いたレコード・ オブジェクトを表す場合。P'CONSTRAINEDの値は,P の現在の状態(制約付き,または制約なし)を表す。
P'FIRST 接頭辞Pが列挙型または列挙型の部分型を表す場合。P の下限を示す。
P'FIRST 接頭辞Pが配列型に対応しているか,制約付き配列の部分型を表す場合。 最初の添字範囲の下限を示す。
P'FIRST(N) 接頭辞Pが配列型に対応しているか, 制約付き配列の部分型を表す場合。N番目の添字範囲の下限を示す。
P'LAST 接頭辞Pが列挙型または列挙型の部分型を表す場合。P の上限を示す。
P'LAST 接頭辞Pが配列型に対応しているか, 制約付き配列の部分型を表す場合。最初の添字範囲の上限を示す。
P'LAST(N) 接頭辞Pが配列型に対応しているか, 制約付き配列の部分型を表す場合。N番目の添字範囲の上限を示す。
P'LENGTH 接頭辞Pが配列型に対応しているか,制約付き配列の部分型を表す場合。 最初の添字範囲の値の個数を示す(範囲が空の場合はゼロ) 。
P'LENGTH(N) 接頭辞P が配列型に対応しているか,制約付き配列の部分型を表す場合。N番目の添字範囲の値の個数を示す( 範囲が空の場合はゼロ)。
P'POS(X) 接頭辞Pが列挙型または列挙型の部分型を表す場合。 値Xの位置番号を示す。最初の位置番号は0。
P'PRED(X) 接頭辞Pが列挙型または列挙型の部分型を表す場合。 位置番号がXより1小さいP型の値を示す。
P'SIZE 接頭辞Pがオブジェクトを示す場合。 オブジェクトを保持するために割り当てられたビット数を示す。
P'SUCC(X) 接頭辞P が列挙型または列挙型の部分型を表す場合。位置番号がXより1大きいP 型の値を示す。
P'VAL(N) 接頭辞Pが列挙型または列挙型の部分型を表す場合。位置番号がNのP 型の値を示す。最初の位置番号は0。

C.2.1.2.1 列挙型の属性の指定

次の宣言について考えます。

     type DAY is
        (MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY);
     MY_DAY : DAY;

列挙型の属性の使用例を次に示します。属性の値を確認するのにEXAMINE コマンドを使用することはできませんので注意してください。これは属性が変数名ではないためです。 属性の値を確認するときは,代わりにEVALUATE コマンドを使用してください。これと同じ理由から,DEPOSITコマンドでは属性を:= 演算子の右辺にしか置けません。

     DBG> EVALUATE DAY'FIRST
     MON
     DBG> EVALUATE DAY'POS(WEDNESDAY)
     2
     DBG> EVALUATE DAY'VAL(4)
     FRI
     DBG> DEPOSIT MY_DAY := TUESDAY
     DBG> EVALUATE DAY'SUCC(MY_DAY)
     WED
     DBG> DEPOSIT . := DAY'PRED(MY_DAY)
     DBG> EXAMINE .
     EXAMPLE.MY_DAY: MONDAY
     DBG> EVALUATE DAY'PRED(MY_DAY)
     %DEBUG-W-ILLENUMVAL, enumeration value out of legal range

C.2.1.2.2 オーバロードされた列挙リテラルの解決

次の宣言について考えます。

     type MASK is (DEC,FIX,EXP);
     type CODE is (FIX,CLA,DEC);
     MY_MASK : MASK;
     MY_CODE : CODE;

次の例では,オーバロードされた列挙リテラルFIXを型明示式CODE'(FIX) で解決します。この列挙リテラルFIXはCODE型とMASK型の両方に属しています。

     DBG> DEPOSIT MY_CODE := FIX
     %DEBUG-W-NOUNIQUE, symbol 'FIX' is not unique
     DBG> SHOW SYMBOL/TYPE FIX
     data EXAMPLE.FIX
         enumeration type (CODE, 3 elements), size: 1 byte
     data EXAMPLE.FIX
         enumeration type (MASK, 3 elements), size: 1 byte
     DBG> DEPOSIT MY_CODE := CODE'(FIX)
     DBG> EXAMINE MY_CODE
     EXAMPLE.MY_CODE:        FIX

C.2.2 演算子と式

次の節では,Adaの演算子と言語式に関するデバッガのサポートについて説明します。

C.2.2.1 言語式の演算子

サポートされているAdaの言語式の演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号(一致)
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 MOD モジュロ
挿入辞 REM 剰余
挿入辞 ** べき乗(VAX固有)
接頭辞 ABS 絶対値
挿入辞 & 連結(文字列型のみ)
挿入辞 = 等値(スカラ型および文字列型のみ)
挿入辞 /= 不等(スカラ型および文字列型のみ)
挿入辞 > 大なり(スカラ型および文字列型のみ)
挿入辞 >= 以上(スカラ型および文字列型のみ)
挿入辞 < 小なり(スカラ型および文字列型のみ)
挿入辞 <= 以下(スカラ型および文字列型のみ)
接頭辞 NOT 論理否定
挿入辞 AND 論理積(ビット配列以外の場合)
挿入辞 OR 論理和(ビット配列以外の場合)
挿入辞 XOR 排他的論理和(ビット配列以外の場合)

次に示す項目はサポートされていません。

C.2.2.2 言語式

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

式の種類 デバッガのサポート
型変換 Adaで指定された明示的な 型変換はどれもサポートしていない。しかし,デバッガが式を評価するときは数値型の間で特定の型変換が 暗黙に行われる。

精度の異なる型が式に含まれている場合,デバッガは式を評価する前に, 精度の低い型を精度の高い型に変換する。

  • 整数型と浮動小数点数型が混在しているときは,整数型が浮動小数点数型に変換される。

  • 整数型と固定小数点数型が混在しているときは,整数型が固定小数点数型に変換される。

  • サイズの異なる整数型(たとえば,バイト整数とワード整数)が混在しているときは, サイズの小さい整数型が大きい整数型に変換される。
部分型 完全にサポートしている。 ただし,デバッガは,部分型および範囲の制約がある型を"部分範囲"型として示す。
型明示式 オーバロードされた列挙リテラル( 識別子は同じだが,異なる列挙型に含まれるリテラル) を解決しなければならないので,サポートしている。それ以外の目的では型明示式をサポートしていない。
アロケータ アロケータを使用する演算は何もサポートしていない。
ユニバーサル式 サポートしていない。

C.2.3 データ型

サポートされているAdaのデータ型を次に示します。

Adaのデータ型 VMSのデータ型名
INTEGER ロングワード整数(L)
SHORT_INTEGER ワード整数(W)
SHORT_SHORT_ INTEGER バイト整数(B)
SYSTEM.UNSIGNED_QUADWORD クォドワード符号なし(QU)
SYSTEM.UNSIGNED_ LONGWORD ロングワード符号なし(LU)
SYSTEM.UNSIGNED_WORD ワード符号なし(WU)
SYSTEM.UNSIGNED_BYTE バイト符号なし(BU)
FLOAT F浮動小数点数(F)
SYSTEM.F_ FLOAT F浮動小数点数(F)
SYSTEM.D_FLOAT D浮動小数点数(D)
LONG_FLOAT LONG_FLOAT (D_FLOAT)プラグマが有効のときは,D 浮動小数点数(D)。 LONG_FLOAT (G_FLOAT)プラグマが有効のときは,G浮動小数点数(G) 。
SYSTEM.G_FLOAT G浮動小数点数(G)
SYSTEM.H_FLOAT (VAX固有) H浮動小数点数(H)
LONG_LONG_FLOAT (VAX固有) H浮動小数点数(H)
IEEE_SINGLE_FLOAT (Alpha 固有) S浮動小数点数(FS)
IEEE_DOUBLE_FLOAT (Alpha固有) T浮動小数点数(FT)
固定 (なし)
STRING ASCIIテキスト(T)
BOOLEAN 境界合わせされたビット列(V)
BOOLEAN 境界合わせされていないビット列(VU)
列挙 値が符号なしバイトと一致する列挙型は, バイト符号なし(BU)。値が符号なしワードと一致する列挙型は,ワード符号なし(WU) 。それ以外の列挙型に対応するオペレーティング・システムのデータ型はない。
配列 (なし)
レコード (なし)
アクセス(ポインタ) (なし)
タスク (なし)

C.2.4 コンパイルとリンク

ユーザのシステムのプログラム・ライブラリADA$PREDEFINEDにある,Ada の定義済みユニットは/NODEBUG修飾子を使用してコンパイルされています。 定義済みユニットの中で宣言されている名前をデバッガで参照するにはその前に, 定義済みユニットのソース・ファイルをACS EXTRACT SOURCE コマンドでコピーしなければなりません。そして,コピーしたファイルを/DEBUG 修飾子を使用してコンパイルし,適切なライブラリにしてから,/DEBUG 修飾子を付けてプログラムを再リンクする必要があります。

Adaの各コンパイル・コマンドで/NODEBUG修飾子を使用した場合,デバッグのためにモジュールに含まれるのはグローバル・ シンボル・レコードだけです。 このときのグローバル・シンボルは,プログラムが他言語のモジュールへエクスポートする名前です。 プログラムは次のAdaのエクスポート・ プラグマを使用して名前をエクスポートします。


EXPORT_PROCEDURE
EXPORT_VALUED_PROCEDURE
EXPORT_FUNCTION
EXPORT_OBJECT
EXPORT_EXCEPTION
PSECT_OBJECT

ACS LINKコマンドで/DEBUG修飾子を使用すると,リンカは,実行可能なイメージ内の特定のユニットのクロージャにデバッグの情報をすべて含めます。

C.2.5 ソースの表示

Adaプログラム固有の次の理由から,ソース・コードを表示できないことがあります。

Adaプログラムでソース・コードの表示を制御する方法を次に説明します。

コンパイラ・コマンドの/COPY_SOURCE修飾子(省略時設定)が有効な状態でプログラムをコンパイルした場合, 表示されるAdaのソース・コードは, プログラムを新しくコンパイルしたときのプログラム・ライブラリにあるソース・ ファイルをコピーして取得されます。/NOCOPY_SOURCE修飾子を使用してプログラムをコンパイルした場合, 表示されるソース・コードは, プログラムのコンパイル単位に対応する外部ソース・ファイルから取得されます。

コピーされるソース・ファイルのファイル指定,または外部ソース・ファイルのファイル指定は, 対応するオブジェクト・ファイルに埋め込まれています。 たとえば,コンパイル単位をコピーするのにACSのCOPY UNITコマンドを使用しても, あるいは,ライブラリ全体をコピーするのにDCLのCOPY コマンドかBACKUPコマンドを使用しても,デバッガはコピーされたソース・ ファイルから元のプログラム・ライブラリを検索します。コピー後に元のコンパイル単位を修正した場合, またはコピー後に元のライブラリを削除した場合, デバッガはコピーされた元のソース・ファイルを見つけることができません。 同様に,外部ソース・ファイルを別のディスクやディレクトリに移動したときも, デバッガは元のソース・ファイルを見つけられません。

このような場合は,ソースの表示のための正しいファイルを検索するために,SET SOURCE コマンドを使用します。プログラム・ライブラリやソース・ コードの複数のディレクトリを示す検索リストを指定することができます。 次に例を示します。ADA$LIBは,プログラム・ライブラリ・マネージャが現在のプログラム・ ライブラリと等しく定義する論理名です。

     DBG> SET SOURCE ADA$LIB,DISK:[SMITH.SHARE.ADALIB]

ユーザがデバッガのEDITコマンドを使用するときにデバッガが取り出す外部ソース・ ファイルを検索するための検索リストは,SET SOURCEコマンドでは変更されません。 ソース・ファイルを検索する場所をEDITコマンドで指定するときは,SET SOURCE/EDIT コマンドを使用します。

C.2.6 EDITコマンド

Adaプログラムで省略時にデバッガのEDITコマンドが取り出す外部ソース・ ファイルは,実行を現在一時停止しているコンパイル単位を作成するためにコンパイルされた外部ソース・ ファイルです。プログラム・ライブラリ内のコピーされたソース・ ファイルは編集しないでください。デバッガはこのソース・ ファイルをソースの表示のために使用します。

編集するソース・ファイルのファイル指定は,コンパイル中に,対応するオブジェクト・ ファイルに埋め込まれます(/NODEBUGを指定しなかった場合) 。コンパイル後にソース・ファイルの配置場所を変更すると,デバッガがそれらのソース・ ファイルを見つけられなくなります。

配置場所を変更したときは,デバッガのSET SOURCE/EDITコマンドを使用すると, デバッガがソース・ファイルを検索する,1つまたは複数のディレクトリからなる検索リストを指定することができます。 次に例を示します。

     DBG> SET SOURCE/EDIT [],USER:[JONES.PROJ.SOURCES]

SET SOURCE/EDITコマンドを使用しても,デバッガがソースの表示に使用するコピー元のソース・ ファイルを検索するための検索リストは変更されません。

SHOW SOURCE/EDITコマンドを使用すると,現在EDITコマンドで使用中のソース・ ファイル検索リストが表示されます。CANCEL SOURCE/EDITコマンドを使用すると, 現在EDITコマンドで使用中のソース・ファイル検索リストが取り消され, 省略時の検索モードに戻ります。

C.2.7 GOコマンドとSTEPコマンド

AdaプログラムでGOコマンドやSTEPコマンドを使用する場合は,次の点に注意してください。

C.2.8 Adaのライブラリ・パッケージのデバッグ

Adaのメイン・プログラム,またはAdaのコードを呼び出すAda以外のメイン・ プログラムが実行されるときに,Adaの実行時ライブラリに対して初期化コードが実行され, プログラムが依存するすべてのライブラリ単位に対して確立コードが実行されます。 確立コードは,メイン・プログラムの実行前にライブラリ単位を適切な順序で確立します。 ライブラリの仕様と本体, およびそれらのサブユニットもこのプロセスによって確立されます。

ライブラリ・パッケージを確立すると,次の処理が行われます。

Adaプログラムをデバッガの制御下に置くと,初めに,初期化コードの実行前およびライブラリ単位の確立前に実行が一時停止されます。 次に例を示します。

     DBG> RUN FORMS
     Language: ADA, Module: FORMS
     Type GO to reach main program
     DBG>

この時点で,GOと入力してメイン・プログラムを開始する前に,注目したいパッケージの仕様や本体にブレークポイントを設定することによって, ライブラリ・パッケージ内の命令を何箇所かステップ実行してチェックすることができます。 その後,各パッケージを開始するためにGOコマンドを使用します。 パッケージの本体にブレークポイントを設定するには,SET BREAKコマンドでパッケージ単位名を指定します。パッケージの仕様にブレークポイントを設定するときは, パッケージ単位名をその後ろにアンダスコア(_) を付けて指定します。

パッケージの本体にブレークポイントを設定しても,その本体に対するデバッガのモジュールが設定されていないときはブレークされません。 モジュールが設定されていない場合は, パッケージの仕様のところでブレークされます。 このようになるのは,with句の中で名前を指定されているパッケージの仕様に対するモジュールを, デバッガが自動的に設定するためです。 デバッガは,対応するパッケージ本体に対するモジュールを自動的には設定しません( 第C.2.14項を参照)。

また,パッケージの仕様の中で宣言されているサブプログラムにブレークポイントを設定するには, パッケージの本体に対するモジュールをユーザが設定する必要があります。

コンパイラは,ライブラリ・パッケージの中で宣言されているサブプログラムに固有の名前を作成しますので注意してください。 これらの名前は, オーバロードされた名前です。または,オーバロードされた名前になることもあります。 デバッガの出力には,これらの固有の名前が使用されます。 また,使用しないと名前があいまいになる場合は,この固有の名前を各コマンドで使用する必要があります。 オーバロードされた名前とシンボルの解決についての詳しい説明は, 第C.2.15 項を参照してください。

C.2.9 定義済みブレークポイント

AdaプログラムまたはAdaのコードを呼び出すAda以外のプログラムでデバッガを起動すると,Ada のタスキング例外イベントに対応する2つのブレークポイントが自動的に設定されます。 これらのブレークポイントは,Ada の実行時ライブラリが存在しているときに,デバッガの初期化中に自動的に設定されます。

この状況でSHOW BREAKコマンドを入力すると,次のようにブレークポイントが表示されます。

     DBG> SHOW BREAK
     Predefined breakpoint on ADA event "EXCEPTION_TERMINATED"
         for any value
     Predefined breakpoint on ADA event "DEPENDENTS_EXCEPTION"
         for any value
     DBG>

C.2.10 例外のモニタ

Adaプログラムの場合,デバッガは次の3種類の例外を認識します。

次の各サブトピックでは,これらの例外をモニタする方法について説明します。

C.2.10.1 すべての例外のモニタ

SET BREAK/EXCEPTIONコマンドを使用すると,どの例外またはVMS条件にもブレークポイントを設定することができます。 これには,Adaの実行時ライブラリの内部でシグナル通知される特定のVMS 条件も含まれます。これらの条件は言語処理系の機構によるものであり, プログラムの障害を意味するものではありません。 また,これらの条件をAdaの例外ハンドラで処理することはできません。 プログラムをデバッグ中にこれらの条件が現れる場合は, ブレークポイントを設定するときに,例外の種類を指定することもできます。

SET TRACE/EXCEPTIONコマンドの結果,AdaのCONSTRAINT_ERROR例外のためにトレースポイントが現れるときの例を, 次に示します。

     DBG> SET TRACE/EXCEPTION
     DBG> GO
           . . .
     %ADA-F-CONSTRAINT_ERRO, CONSTRAINT_ERROR
     -ADA-I-EXCRAIPRI, Exception raised prior to PC = 00000A7C
     trace on exception preceding
         ADA$RAISE\ADA$RAISE_CONDITION.%LINE 333+12
           . . .

内部で例外が発生したサブプログラムを呼び出したとき,または例外発生の対象となったサブプログラムを呼び出したときのトレースバックをSHOW CALLSコマンドで表示する例を次に示します。

     DBG> SET BREAK/EXCEPTION DO (SHOW CALLS)
     DBG> GO
            . . .

     %SYSTEM-F-INTDIV, arithmetic trap, integer divide
          by zero at PC=000008AF,
     PSL=03C000A2 break on exception preceding
          SYSTEM_OPS.DIVIDE.%LINE 17+6
          17:      return X/Y;

      module name     routine name       line    rel PC    abs PC
     *SYSTEM_OPS      DIVIDE               17   00000015  000008AF
     *PROCESSOR       PROCESSOR            19   000000AE  00000BAD
     *ADA$ELAB_PROCESSOR
                      ADA$ELAB_PROCESSOR        00000009  00000809
                      LIB$INITIALIZE            00000054  00000C36
      SHARE$ADARTL                              00000000  000398BE
     *ADA$ELAB_PROCESSOR
                      ADA$ELAB_PROCESSOR        0000001B  0000081B
                      LIB$INITIALIZE            0000002F  00000C21

この例では,SYSTEM_OPSパッケージのDIVIDEサブプログラムの17行目でSS$_INTDIV 条件が発生します。SS$_INTDIVなどのいくつかの条件はAdaのある種の定義済みの例外と等価なものとして処理されるという重要な働きを, この例は示しています。

Adaの定義済みの例外と条件を照合するのは,例外部分を持つすべてのフレーム用にAda に備えられている条件ハンドラです。したがって,Adaの例外名と等価な名前を持った条件によって例外のブレークポイントまたはトレースポイントが検出された場合, メッセージには,システムの条件コード名 だけが表示され,対応するAdaの例外名は表示されません。

C.2.10.2 特定の例外のモニタ

例外が発生すると,デバッガは次の組み込みシンボルを設定します。この組み込みシンボルを使用すると, 特定の例外が発生したときだけ検出されるように, 例外のブレークポイントやトレースポイントを指定することができます。

%EXC_FACILITY 例外を生じたファシリティの名前を示す文字列。Ada の定義済みの例外およびユーザ定義の例外のファシリティ名は,ADA 。
%EXC_NAME 例外名を示す大文字の文字列。発生した例外がAdaの定義済みの例外の場合,15 文字を超える分の名前は切り捨てられる。たとえば, CONSTRAINT_ERRORは切り捨てられ,CONSTRAINT_ERROになる。発生した例外がユーザ定義の例外の場合,%EXC_NAME には"EXCEPTION"という文字列が入り, ユーザ定義の例外名は%ADAEXC_NAMEに入る。
%ADAEXC_NAME 発生した例外がユーザ定義の例外の場合,%ADAEXC_NAME にはその例外名を示す文字列が入り,%EXC_NAME には"EXCEPTION"という文字列が入る。発生した例外がユーザ定義の例外ではない場合,%ADAEXC_NAME には空文字列が入り,%EXC_NAMEに例外名が入る。
%EXC_NUM 例外の個数。
%EXC_SEVERITY 例外の重大度を示す文字列(F ,E,W,I,S,または?)。

C.2.10.3 処理される例外と例外ハンドラのモニタ

SET BREAK/EVENTコマンドとSET TRACE/EVENTコマンドを使用すると,Ada の例外ハンドラが処理しようとしている例外にブレークポイントとトレースポイントを設定することができます。 制御を渡されるAdaの各例外ハンドラの実行を, これらのコマンドでモニタすることができます。

これらのコマンドでは,次の2つのイベント名を指定することができます。

HANDLED 何らかのAdaの例外ハンドラが例外を処理しようとしているときに検出される。( HANDLED_OTHERS を含む)
HANDLED_OTHERS Other を選択しているAdaの例外ハンドラが例外を処理しようとしているときのみ検出される。

たとえば,次のコマンドは,Adaの例外ハンドラが例外を処理しようとしているときに検出されるブレークポイントを設定します。

     DBG> SET BREAK/EVENT=HANDLED

ブレークポイントが検出されると,処理されようとしている例外と実行されようとしている例外ハンドラをデバッガが示します。 その後,この情報を利用して特定のハンドラにブレークポイントを設定することができます。 また,GOコマンドを入力して,Adaのどのハンドラが次に例外を処理しようとするかを見ることもできます。 次に例を示します。

     DBG> GO
           . . .
     break on Ada event HANDLED
       task %TASK 1 is about to handle an exception
       The Ada exception handler is at: PROCESSOR.%LINE 21
         %ADA-F-CONSTRAINT_ERRO, CONSTRAINT_ERROR
         -ADA-I-EXCRAIPRI, Exception raised prior to PC = 00000A7C
     DBG> SET BREAK PROCESSOR.%LINE 21; GO

C.2.11 データの検査と操作

データを検査または操作するときは,次の関連事項に注意してください。

型明示式の使用も含め,デバッガではほとんどの場合,プログラムのソース・ コードに指定するのとまったく同じように,変数や式をデバッガ・コマンドの中で指定することができます。 次の各サブトピックでは,レコードとアクセス型についてのデバッガのサポートに関する補足事項について説明します。

C.2.11.1 レコード

デバッガによるレコードのサポートについては次の点に注意してください。

C.2.11.2 アクセス型

デバッガによるアクセス型のサポートについては,次の点に注意してください。

不完全型についてのデバッガのサポートの例を示します。次の宣言を見てください。

     package P is
        type T is private;
     private
        type T_TYPE;
        type T is access T_TYPE;
     end P;

     package body P is
        type T_TYPE is
           record
             A: NATURAL := 5;
             B: NATURAL := 4;
           end record;

        T_REC: T_TYPE;
        T_PTR: T := new T_TYPE'(T_REC);
     end P;

     with P; use P;
     procedure INCOMPLETE is
        VAR: T;
     begin
         . . .
     end INCOMPLETE;

T型についての完全な情報がデバッガに与えられていないので,VAR変数を操作することはできません。 ただし,パッケージ本体Pの中で宣言されているオブジェクトについては情報が与えられているので,T_PTR 変数とT_REC 変数を操作することはできます。

C.2.12 モジュール名とパス名

Adaのデバッガ・モジュール名は,対応するコンパイル単位の名前と同じです。 これには次の条件があります。あいまいさをなくすために,仕様の名前にアンダスコア文字(_) を追加して仕様と本体の名前とを区別してください。 たとえば,TEST (本体),TEST_ (仕様)とします。プログラム内のモジュールの正確な名前を確認するには,SHOW MODULE コマンドを使用します。

ほとんどの場合,パス名を指定する際に,仕様と本体とを区別するアンダスコアを後部に入力する必要はありません。 通常,デバッガは状況に応じてこの2 つを区別します。したがって,あいまいさを解消しなければならないときだけ, この命名規則を使用してください。

デバッガの言語がAdaに設定されている場合,デバッガは,パス名の要素を区切るのに選択要素の表記法を一般的に使用し,Ada の規則に従ってパス名を構成します。 他の言語では要素を区切るのにバックスラッシュを使用します。 次に例を示します。

     TEST_.A1        ! A1 はコンパイル単位 TEST のパッケージ
                     ! 仕様の中で宣言されている
     TEST.B1         ! B1 はコンパイル単位 TEST のパッケージ
                     ! 本体の中で宣言されている

サブユニットのパス名(展開される名前)は,最大247文字の長さまで指定することができます。

シンボルがパッケージの外部で直接に可視になるよう,パッケージ内でuse 句によって宣言されている場合は,プログラム自体またはデバッガ・ コマンドのいずれにおいても,そのシンボルを参照するために,展開された名前( package-name.symbolを指定する必要はありません。

指定されたブロック,サブプログラム,またはパッケージがuse句の中で参照しているパッケージを示すには,SHOW SYMBOL/USE_CLAUSE コマンドを使用します( 指定されているパッケージがライブラリであるかどうかは関係ありません) 。指定されている要素が,ライブラリであるかどうかにかかわらずパッケージである場合は,use 句内の特定のモジュール名を示すブロック, サブプログラム,パッケージなどもこのコマンドで示すことができます。 次に例を示します。

     DBG> SHOW SYMBOL/USE_CLAUSE B_
     package spec B_
         used by:  F
         uses:     A_

ソース・コードのループ文または宣言ブロックにラベルが付けられている場合, デバッガはそのラベルを表示します。それ以外の場合,ループ 文についてはLOOP$nを表示し,宣言ブロックについてはBLOCK$ nを表示します。それぞれのnは, その文またはブロックが始まる行番号を示します。

C.2.13 シンボル検索規則

Adaプログラムでパス名(Adaの展開された名前を含む)を指定しなかった場合, デバッガは次のように実行時シンボル・テーブルを検索します。

  1. デバッガは,現在そこで実行を一時停止している現在のPC値に近いブロックまたはルーチンの中でシンボルを検索します。

  2. シンボルが見つからない場合は,use句に指定されているパッケージを次に検索します。 デバッガは,現在の有効範囲の領域と同じモジュールに宣言があるパッケージと, ライブラリ・パッケージとを区別しません。 可視である複数のパッケージの中で同じシンボルが宣言されている場合,Ada の規則によりシンボルは固有のものではなくなり, 次のようなメッセージが発行されます。
         %DEBUG-E-NOUNIQUE, symbol 'X' is not unique
    

  3. それでもまだシンボルが見つからない場合,他の言語については, 呼び出しスタックと他の有効範囲を検索します。

C.2.14 モジュールの設定

ユーザまたはデバッガがAdaのモジュールを設定するときに,省略時設定では, デバッガが"関連"モジュールもすべて設定します。この関連モジュールとは, 設定されるモジュールの中でシンボルが可視でなければならないモジュールを指します。 これらの関連モジュールは,with句またはサブユニット関係のどちらかで設定されるモジュールに関連づけられます。

関連モジュールの設定は次のように行われます。設定されるモジュールがM1 である場合,次の各モジュールが関連しているとみなされ,設定されます。

多くのモジュールが設定されることでデバッガの性能に問題が生じるときは,SET MODE NODYNAMIC コマンドを使用してください。このコマンドで, 動的モジュールの設定が禁止されるとともに,関連モジュールの設定が禁止されます。 そのあとでSET MODULEコマンドを使用して,個々のモジュールを明示的に設定する必要があります。

省略時のSET MODULEコマンドでは,コマンドで指定したモジュールと同時に関連モジュールが設定されます。

SET MODULE/NORELATEDコマンドでは,明示的に指定したモジュールだけが設定されます。 しかし,SET MODULE/NORELATEDを使用した場合,別のユニットで宣言されていて実行の時点で可視であるはずのシンボルが可視でない場合があります。 つまり,同じそのシンボルを再宣言することによって隠されるはずのシンボルが可視になっていることがあります。

CANCEL MODULE/NORELATEDコマンドでRSTから削除されるのは,明示的に指定したモジュールだけです。 省略時設定のCANCEL MODULE/NORELATEDコマンドは,Ada の有効範囲規則と可視性の規則の目的に合致した方法で関連モジュールを削除します。 正確な効果はモジュールの関連性に依存します。

サブユニットの関連と直接関連の違いは,ライブラリ・パッケージの関連の違いと同様です。

C.2.14.1 パッケージ本体のためのモジュールの設定

デバッガは,パッケージ本体のためのモジュールを自動的には設定しません。

パッケージ本体をデバッグするには,または,対応するパッケージ仕様の中で宣言されているサブプログラムをデバッグするには, ユーザが自分でライブラリ・ パッケージ本体のためのモジュールを設定しなければならない場合があります。

C.2.15 オーバロードされた名前とシンボルの解決

オーバロードされた名前やシンボルが現れると,次のようなメッセージが表示されます。

     %DEBUG-E-NOTUNQOVR, symbol 'ADD' is overloaded
          use SHOW SYMBOL to find the unique symbol names

オーバロードされたシンボルが列挙リテラルである場合は,オーバロードを解決するために, 型明示式を使用することができます。

オーバロードされたシンボルがサブプログラムまたはタスクのaccept文を表す場合は, コンパイラがデバッガ用に作成する固有の名前を使用することができます。 名前は,あとでパッケージ本体でオーバロードされることがあるので, コンパイラは必ず各サブプログラム固有の名前をライブラリ・ パッケージの仕様に作成します。タスクのaccept文やサブプログラムが他の場所で宣言されているときは, タスクのaccept文やサブプログラムが実際にオーバロードされる場合にだけ, 固有の名前が作成されます。

オーバロードされたタスクのaccept文とサブプログラムの名前は,2つのアンダスコアとそれに続く整数からなる接尾辞によって区別されます。 それぞれのシンボルは, この整数で別々のものとして示されます。名前がオーバロードされているサブプログラムを別々のものとして指定するには, 固有の名前を表記してデバッガ・コマンドを使用する必要があります。しかし, あいまいさがない場合は,固有の名前が作成されてもその名前を使用する必要はありません。

C.2.16 CALLコマンド

Adaプログラムで確実にCALLコマンドを使用できるのは,エクスポートされているサブプログラムでこのコマンドを使用する場合だけです。 エクスポートされるサブプログラムは, ライブラリのサブプログラムであるか, またはライブラリ・パッケージの最も外側にある宣言部で宣言されている必要があります。

CALLコマンドは,サブプログラムをエクスポートできるかどうかはチェックしません。 また,ユーザが指定するパラメータの受け渡し方式もチェックしません。 パラメータの値を変更するためにCALLコマンドを使用することはできませんので注意してください。

Adaの実行時ライブラリを実行中にCALLコマンドを入力するとデッドロックを起こすことがあります。 実行時ライブラリ・ルーチンは,タスキング環境で実行時ライブラリ・ ルーチンを作動可能にする内部ロックを取得および解放します。 デッドロックを生じる可能性があるのは,CALLコマンドから呼び出されたサブプログラムが, 実行中の実行時ライブラリ・ルーチンによってロックされている資源を要求するときです。 非タスキング・プログラムにおいてこういった状況が生じないようにするには,Ada の文を実行する直前, または実行した直後にCALLコマンドを入力してください。 しかし,この方法では,タスキング・プログラムでのデッドロックの発生を完全に防ぐことはできません。 呼び出しの時点で他の何らかのタスクが実行時ライブラリ・ ルーチンを実行している可能性があるからです。タスキング・ プログラムでCALLコマンドを使用しなければならない場合は,呼び出されるサブプログラムがタスキング操作や入出力操作を何も実行しないようにすると, デッドロックを避けることができます。

C.3 BASIC

次の各サブトピックでは,デバッガによるBASICのサポートについて説明します。

C.3.1 言語式の演算子

言語式でサポートされているBASICの演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算,文字列の連結
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 ** べき乗
挿入辞 ^ べき乗
挿入辞 = 等値
挿入辞 <> 不等
挿入辞 >< 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 => 以上
挿入辞 < 小なり
挿入辞 <= 以下
挿入辞 =< 以下
接頭辞 NOT ビット単位のNOT
挿入辞 AND ビット単位のAND
挿入辞 OR ビット単位のOR
挿入辞 XOR ビット単位の排他的論理和
挿入辞 IMP ビット単位の含意
挿入辞 EQV ビット単位の同値

C.3.2 言語式とアドレス式の構造

サポートされている,BASICの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 添字指定
:: レコードの構成要素の選択

C.3.3 データ型

サポートされているBASICのデータ型を次に示します。

BASICのデータ型 VMSのデータ型名
BYTE バイト整数(B)
WORD ワード整数(W)
LONG ロングワード整数(L)
SINGLE F浮動小数点数(F)
DOUBLE D浮動小数点数(D)
GFLOAT G浮動小数点数(G)
HFLOAT (VAX固有) H浮動小数点数(H)
DECIMAL パック10進数(P)
STRING ASCIIテキスト(T)
RFA (なし)
RECORD (なし)
配列 (なし)

C.3.4 デバッグのためのコンパイル

BASIC環境でプログラムに変更を加えてから,そのプログラムを保存したり置換したりしないまま,/DEBUG 修飾子を使用してコンパイルしようとすると,"Unsaved changes, no source line debugging available" ( 変更を保存していないのでデバッグにソース行を使用できません) というBASIC のエラーが通知されます。この問題を防ぐには,プログラムを保存または置換してから,/DEBUG 修飾子を使用してプログラムを再コンパイルしてください。

C.3.5 定数

[radix]"numeric-string"[type]という形式("12.34"GFLOAT など)や,n%という形式(整数25の25%など) のBASICの定数は,デバッガの式ではサポートされていません。

C.3.6 式の評価

BASIC言語でオーバフローする式であっても,デバッガが評価する場合に必ずオーバフローするとはかぎりません。BASIC の規則でオーバフローになる場合でも, デバッガは数値的に正しい結果を計算しようとします。この違いは,10 進数を計算するときに特に影響があります。

C.3.7 行番号

デバッグ・セッションではソース・コード・ディスプレイに表示される連続した行番号を参照しますが, この行番号を生成するのはコンパイラです。BASIC プログラムに他のファイルからコードを取り込んだり,付加したりする場合, 取り込まれたコードの行にもコンパイラによって順番に行番号が付けられます。

C.3.8 ルーチンへのステップ

STEP/INTOコマンドは,外部関数をチェックするのに便利です。しかし, 内部サブルーチンやDEFで実行を停止するのにこのコマンドを使用すると, デバッガは最初に実行時ライブラリ(RTL)のルーチン内の命令をステップ実行するので, 有用な情報は何も得られません。次の例では, Print_routineを呼び出す8行目で実行が一時停止されます。

          . . .
     ->  8  GOSUB Print_routine
         9  STOP
          . . .
        20  Print_routine:
        21    IF Competition = Done
        22      THEN PRINT "The winning ticket is #";Winning_ticket
        23      ELSE PRINT "The game goes on."
        24    END IF
        25  RETURN

STEP/INTOコマンドを実行すると,デバッガは適切なRTLコード内の命令をステップ実行して, 表示のために使用できるソース行がないことをユーザに伝えてきます。 一方,STEPコマンドだけを使用すると,デバッガはPrint_routine への呼び出しを通り越して,直接ソース行の9行目に進みます。 サブルーチンまたはDEF関数のソース・コードをチェックするには, ルーチンのラベルにブレークポイントを設定してください。たとえば, SET BREAK PRINT_ROUTINEコマンドを入力します。こうすると,正確にルーチンの開始地点この例では20 行目で実行を一時停止してから,コード内の命令を直接ステップ実行することができます。

C.3.9 シンボル参照

単一のBASICプログラム内の変数名とラベル名は,すべて固有のものでなければなりません。 固有でない場合,デバッガはシンボルのあいまいさを解消できません。

C.3.10 ウォッチポイント

BASICでウォッチポイントを設定できるのは,COMMON文またはMAP文で宣言されている変数( 静的変数)に対してだけです。DECLARE文で明示的に宣言されている変数にウォッチポイントを設定することはできません。

C.4 BLISS

次の各サブトピックでは,デバッガによるBLISSのサポートについて説明します。

C.4.1 言語式の演算子

言語式でサポートされているBLISSの演算子を次に示します。

種類 シンボル 機能
接頭辞 . 間接参照
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 MOD 剰余
挿入辞 ^ 左シフト
挿入辞 EQL 等値
挿入辞 EQLU 等値
挿入辞 EQLA 等値
挿入辞 NEQ 不等
挿入辞 NEQU 不等
挿入辞 NEQA 不等
挿入辞 GTR 大なり
挿入辞 GTRU 大なり符号なし
挿入辞 GTRA 大なり符号なし
挿入辞 GEQ 以上
挿入辞 GEQU 以上符号なし
挿入辞 GEQA 以上符号なし
挿入辞 LSS 小なり
挿入辞 LSSU 小なり符号なし
挿入辞 LSSA 小なり符号なし
挿入辞 LEQ 以下
挿入辞 LEQU 以下符号なし
挿入辞 LEQA 以下符号なし
接頭辞 NOT ビット単位のNOT
挿入辞 AND ビット単位のAND
挿入辞 OR ビット単位のOR
挿入辞 XOR ビット単位の排他的OR
挿入辞 EQV ビット単位の同値

C.4.2 言語式とアドレス式の構造

サポートされている,BLISSの言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
[fldname] フィールドの選択
<p,s,e> ビット・フィールドの選択

C.4.3 データ型

サポートされているBLISSのデータ型を次に示します。

BLISSのデータ型 VMSのデータ型名
BYTE バイト整数(B)
WORD ワード整数(W)
LONG ロングワード整数(L)
QUAD (Alpha固有) クォドワード(Q)
BYTE UNSIGNED バイト符号なし(BU)
WORD UNSIGNED ワード符号なし(WU)
LONG UNSIGNED ロングワード符号なし(LU)
QUAD UNSIGNED (Alpha固有) クォドワード符号なし(QU)
VECTOR (なし)
BITVECTOR (なし)
BLOCK (なし)
BLOCKVECTOR (なし)
REF VECTOR (なし)
REF BITVECTOR (なし)
REF BLOCK (なし)
REF BLOCKVECTOR (なし)

C.5 CC

次の各サブトピックでは,デバッガによるCのサポートについて説明します。

C.5.1 言語式の演算子

言語式でサポートされているCの演算子を次に示します。

種類 シンボル 機能
接頭辞 * 間接参照
接頭辞 & アドレス
接頭辞 sizeof サイズ
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 % 剰余
挿入辞 << 左シフト
挿入辞 >> 右シフト
挿入辞 == 等値
挿入辞 != 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 < 小なり
挿入辞 <= 以下
接頭辞 ~ (チルド) ビット単位のNOT
挿入辞 & ビット単位のAND
挿入辞 | ビット単位のOR
挿入辞 ^ ビット単位の排他的OR
接頭辞 ! 論理否定
挿入辞 && 論理積
挿入辞 || 論理和

Cでは感嘆符(!)は演算子なので,感嘆符をコメント区切り文字として使用することはできません。 言語がCに設定されている場合は,感嘆符の代わりに/* がコメント区切り文字として受け入れられます。現在の行の終端までがコメントになります。 対応する*/は不要であり,認識もされません。 しかし,デバッガのログ・ファイルをデバッガの入力として使用できるようにするため,1 行の中で空白以外の最初の文字が感嘆符(!) である場合は, デバッガはその感嘆符をコメント区切り文字として認識します。

Cの言語式とデバッガのアドレス式の両方で,デバッガは接頭辞のアスタリスク(*) を間接参照演算子として受け入れます。言語がCに設定されているときのアドレス式では, 接頭辞"*"は接頭辞"."または"@"と同義です。

デバッガは,Cまたは他のどの言語でも代入演算子は何もサポートしません。 これは,デバッグされるプログラムに予期しない変更が加えられるのを防ぐためです。 したがって,=,+=,-=,++, -- などの演算子は認識されません。 メモリ記憶位置の内容を変更するには,DEPOSITコマンドを使用して明示的に変更しなければなりません。

C.5.2 言語式とアドレス式の構造

サポートされている,Cの言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
.(ピリオド) 構造体構成要素の選択
-> ポインタの間接参照

C.5.3 データ型

サポートされているCのデータ型を次に示します。

Cのデータ型 VMSのデータ型名
__int64 (Alpha固有) クォドワード(Q)
unsigned__int64 (Alpha固有) クォドワード符号なし(QU)
__int32 (Alpha固有) ロングワード整数(L)
unsigned__int32 (Alpha固有) ロングワード符号なし(LU)
int ロングワード整数(L)
unsigned int ロングワード符号なし(LU)
__int16 (Alpha固有) ワード整数(W)
unsigned__int16 (Alpha固有) ワード符号なし(WU)
short int ワード整数(W)
unsigned short int ワード符号なし(WU)
char バイト整数(B)
unsigned char バイト符号なし(BU)
float F 浮動小数点数(F)
__f_float (Alpha 固有) F浮動小数点数(F)
double D浮動小数点数(D)
double G浮動小数点数(G)
__g_float (Alpha固有) G浮動小数点数(G)
float (Alpha固有) IEEE S浮動小数点数(FS)
__s_float (Alpha固有) IEEE S浮動小数点数(FS)
double (Alpha固有) IEEE T浮動小数点数(FT)
__t_float (Alpha 固有) IEEE T浮動小数点数(FT)
enum (なし)
struct (なし)
union (なし)
ポインタ型 (なし)
配列型 (なし)

++ Alpha固有です。

float型の浮動小数点数は,コンパイラのスイッチによって,F浮動小数点数またはIEEE S 浮動小数点数のどちらかで表現されます。

double型の浮動小数点数は,コンパイラのスイッチによって,IEEE T浮動小数点数,D 浮動小数点数,またはG浮動小数点数のどちらかで表現されます。

C.5.4 大文字小文字の区別

C言語では,シンボル名の大文字と小文字は区別され,それぞれ別個の文字として処理されます。

C.5.5 静的変数と非静的変数

static,globaldef,globalref,externの各記憶クラスの変数は,静的に割り当てられます。

記憶クラスがautoまたはregisterの変数は,非静的に(スタックまたはレジスタに) 割り当てられます。このような非静的変数は,それらを定義しているルーチンが呼び出しスタック上でアクティブになっているときだけアクセス可能です。

C.5.6 スカラ変数

デバッガ・コマンドでは,Cのどのデータ型であっても,プログラムのソース・ コードに記述するのとまったく同じようにスカラ変数を指定することができます。

次の説明では,char型変数とポインタについて補足します。

デバッガはchar型変数をASCII文字ではなく,バイト整数として解釈します。char 型変数chの内容を文字として表示するには,/ASCII修飾子を使用しなければなりません。

     DBG> EXAMINE/ASCII ch
     SCALARS\main\ch:      "A"

また,char型変数に格納する場合も,/ASCII修飾子を使用してバイト整数を同値のASCII 文字に変換する必要があります。次に例を示します。

     DBG> DEPOSIT/ASCII ch = 'z'
     DBG> EXAMINE/ASCII ch
     SCALARS\main\ch:        "z"

次の宣言と代入が行われている場合に,EXAMINEコマンドでポインタの構文を使用するときの例を示します。

     static long li  = 790374270;
     static int *ptr = &li;
     DBG> EXAMINE *ptr
     *SCALARS\main\ptr:       790374270

C.5.7 配列

デバッガは,Cの配列を他のほとんどの言語と同様に処理します。したがって, 配列の構文を使用して(たとえば,EXAMINE arr[3]で),配列の集合体全体, 配列断面,または配列の個々の要素をそれぞれチェックすることができます。 また,配列への格納は一度に1要素ずつです。

C.5.8 文字列

Cの文字列は,NULLで終了するASCII文字列(ASCIZ文字列)として実現されています。 文字列全体をチェックする場合,または文字列全体にデータを格納する場合は, デバッガが文字列の終端を正しく解釈できるように,/ASCIZ ( または/AZ)修飾子を使用します。Cの配列の添字を指定する演算子([ ]) を使用すると,文字列の個々の文字をチェックしたり,文字列に個々に文字を格納することができます。 文字を個々に検査したり格納したりするときは,/ASCII 修飾子を使用してください。

次の宣言と代入が行われているものとします。

     static char *s = "vaxie";
     static char **t = &s;

EXAMINE/AZコマンドは,*sと**tが指す文字列の内容を表示します。

     DBG> EXAMINE/AZ  *s
     *STRING\main\s: "vaxie"
     DBG> EXAMINE/AZ  **t
     **STRING\main\t:        "vaxie"

DEPOSIT/AZコマンドは,*s が指す変数に新しいASCIZ文字列を格納します。 文字列の新しい内容を表示するには,EXAMINE/AZコマンドを使用します。

     DBG> DEPOSIT/AZ  *s = "DEC C"
     DBG> EXAMINE/AZ  *s,  **t
     *STRING\main\s: "DEC C"
     **STRING\main\t:         "DEC C"

配列の添字指定を行うと,文字列の文字を個々にチェックしたり,文字列の特定の記憶位置に新しいASCII 値を格納することができます。文字列の個々のメンバにアクセスするときは,/ASCII 修飾子を使用してください。 それに続けてEXAMINE/AZコマンドを実行すると,格納された値を含む文字列全体が表示されます。

     DBG> EXAMINE/ASCII s[3]
     [3]:    " "
     DBG> DEPOSIT/ASCII s[3] = "-"
     DBG> EXAMINE/AZ *s, **t
     *STRING\main\s:    "VAX-C"
     **STRING\main\t:   "VAX-C"

C.5.9 構造体と共用体

構造体をチェックするときは,その全体を検査したり,メンバ単位で検査することができます。 また,構造体へのデータの格納は一度に1メンバずつ行うことができます。

構造体のメンバまたは共用体のメンバを参照するには,Cで参照するときの通常の構文を使用します。 つまり,変数p が構造体へのポインタの場合, その構造体のメンバy は,p ->yという式で参照することができます。変数 x が,構造体に割り当てられた記憶域のベースを参照している場合, その構造体のメンバはx.y という式で参照することができます。

デバッガは,構造体や共用体のメンバを参照するのに,Cの型検査規則を使用します。 たとえばx.y の場合,yx のメンバである必要はありません。y は,型と併せてオフセットとして処理されます。このような参照があいまいになる場合( メンバy を持つ構造体が複数ある場合),デバッガは次の規則に従って参照を解決しようとします。 なお,構造体や共用体のメンバ参照のあいまいさを解消するときは, x.yp ->y の両方とも同じ規則が適用されます。

使用される有効範囲を絞るため,また,あいまいさを解消するために, x を参照するときは,いつでもパス名を与えることができます。 パス名は,xy の両方を検索するのに使用されます。

C.6 C++バージョン5.5および5.5以降(Alphaのみ)

Alphaシステムでは,OpenVMSデバッガはバージョン5.5以降(Alphaのみ)のコンパイラでコンパイルされたC++ モジュールデバッグする機能がサポートされています。

デバッガは,C++の次の機能をサポートします。

この節のデバッグの例は,例 C-1に含まれるテスト・ プログラムを参照しており,また,例 C-2 に含まれるデバッグ・セッションの一部を取り出したものになっています。 次節以降で,C++のデバッガ・サポートについて説明します( コンパイラ・バージョン5.5 (Alphaのみ))。

C.6.1 言語式における演算子

言語式でサポートされるC++演算子を次に示します。

種類 シンボル 機能
接頭辞 * 間接参照
接頭辞 & アドレス
接頭辞 sizeof オブジェクトのサイズ
接頭辞 - 単項マイナス(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 % 剰余
挿入辞 << 左シフト
挿入辞 >> 右シフト
挿入辞 == 等しい
挿入辞 != 等しくない
挿入辞 > より大きい
挿入辞 >= 以上
挿入辞 < より小さい
挿入辞 <= 以下
接頭辞 ~ (チルド) ビットごとのNOT
挿入辞 & ビットごとのAND
挿入辞 | ビットごとのOR
挿入辞 ^ ビットごとの排他的OR
接頭辞 ! 論理NOT
挿入辞 && 論理AND
挿入辞 || 論理OR

感嘆符(!)は演算子なので,C++プログラムでコメント区切り文字として使用できません。 ただし,デバッガのログ・ファイルをデバッガの入力として使用できるように, 行内のスペースでない最初の文字が!である場合は, デバッガは!をコメント区切り文字として解釈します。デバッガはC++ 言語モードでは,/*または//をコメントの先頭として解釈し,その行の最後までをコメントとみなします。

デバッガは,C++言語式とデバッガ・アドレス式の両方で,アスタリスク(*) 接頭辞を間接参照演算子として扱います。デバッガがC++言語モードの場合, アドレス式では,*接頭辞はピリオド(.)接頭辞またはサイン(@) 接頭辞と同じです。

デバッグの対象のプログラムが意図に反して修正されることがないように, デバッガはC++,および他の言語の代入演算子をサポートしません。 このため,=,+=,-=,++, -- はデバッガコマンドによって解釈されません。 メモリの内容を変更するには,デバッガのDEPOSITコマンドを使用します。

C.6.2 言語式とアドレス式における構造体

C++の言語式とアドレス式でサポートされる構造体を次に示します。

シンボル 構造体
[ ] 添字付け
. (ピリオド) 構造体の構成要素の選択
-> ポインタ間接参照
:: スコープ解決

C.6.3 データ型

サポートされるC++のデータ型を次に示します。

C++データ型 オペレーティング・システム・ データ型名
__int64 (Alpha) クォドワード整数(Q)
unsigned __int64 (Alpha) クォドワード符号なし整数(QU)
__int32 (Alpha) ロングワード整数(L)
unsigned __int32 (Alpha) ロングワード符号なし整数(LU)
int ロングワード整数(L)
unsigned int ロングワード符号なし整数(LU)
__int16 (Alpha) ワード整数(W)
unsigned __int16 (Alpha) ワード符号なし整数(WU)
short int ワード整数(W)
unsigned short int ワード符号なし整数(WU)
char バイト整数(B)
unsigned char バイト符号なし整数(BU)
float F浮動小数点数(F)
__f_float (Alpha) F浮動小数点数(F)
double D浮動小数点数(D)
double G浮動小数点数(G)
__g_float (Alpha) G浮動小数点数(G)
float (Alpha) IEEE S浮動小数点数(FS)
__s_float (Alpha) IEEE S浮動小数点数(FS)
double (Alpha) IEEE T浮動小数点数(FT)
__t_float (Alpha) IEEE T浮動小数点数(FT)
enum (なし)
struct (なし)
class (なし)
union (なし)
Pointer Type (なし)
Array Type (なし)

float型の浮動小数点数は,コンパイラのスイッチに応じて,F_Floating またはIEEE S_Floatingとして表現されます。

double型の浮動小数点数は,コンパイラのスイッチに応じて,IEEE T_ Floating,D_Floating,またはG_Floatingとして表現されます。

C.6.4 大文字小文字の区別

C++では,シンボル名の大文字小文字が区別されます。つまり,大文字と小文字は異なる文字として扱われます。

C.6.5 クラスに関する情報の表示

クラス宣言に関する静的な情報を表示するには,SHOW SYMBOLコマンドを使用します。 クラス・オブジェクトに関する動的な情報を表示するには,EXAMINE コマンドを使用します(第C.6.6 項を参照)。

SHOW SYMBOL/FULLコマンドを使用すると,次の情報を含むクラス型宣言を表示することができます。


データ・メンバ(静的なデータ・メンバを含む)
メンバ関数(静的なメンバ関数を含む)
コンストラクタとデストラクタ
基底クラスと派生クラス

例を示します。

     dbg> SHOW SYMBOL /TYPE C
     type C
         struct (C, 13 components), size: 40 bytes
     overloaded name C
            instance C::C(void)
            instance C::C(const C &)
     dbg> SHOW SYMBOL /FULL C
     type C
         struct (C, 13 components), size: 40 bytes
           inherits: B1, size: 24 bytes, offset: 0 bytes
                     B2, size: 24 bytes, offset: 12 bytes
           contains the following members:
             overloaded name C::g
                    instance C::g(int)
                    instance C::g(long)
                    instance C::g(char)
             j : longword integer, size: 4 bytes, offset: 24 bytes
             s : longword integer, size: 4 bytes, address: #  [static]
             overloaded name C
             int ==(C &)
             C & =(const C &)
             void h(void)   [virtual]
             ~C(void)
             __vptr : typed pointer type, size: 4 bytes, offset: 4 bytes
             __bptr : typed pointer type, size: 4 bytes, offset: 8 bytes
             structure has been padded, size: 4 bytes, offset: 36 bytes
     overloaded name C
            instance C::C(void)
            instance C::C(const C &)
     DBG>

SHOW SYMBOL/FULLコマンドでは,基底クラスまたは派生クラスのメンバが表示されない点に注意してください。 これらのクラスのメンバについては,SHOW SYMBOL/FULL base_class_name ,およびSHOW SYMBOL/FULL derived_class_nameコマンドを使用します。例を示します。

     DBG> SHOW SYMBOL /FULL B1
     type B1
         struct (B1, 8 components), size: 24 bytes
           inherits: virtual A
           is inherited by: C
           contains the following members:
             i : longword integer, size: 4 bytes, offset: 0 bytes
             overloaded name B1
             void f(void)
             B1 & =(const B1 &)
             void h(void)   [virtual]
             __vptr : typed pointer type, size: 4 bytes, offset: 4 bytes
             __bptr : typed pointer type, size: 4 bytes, offset: 8 bytes
             structure has been padded, size: 12 bytes, offset: 12 bytes
     overloaded name B1
            instance B1::B1(void)
            instance B1::B1(const B1 &)
     DBG>

クラス・メンバに関する情報を表示するには,SHOW SYMBOL/FULL class_ member_nameコマンドを使用します。例を示します。

     DBG> SHOW SYMBOL /FULL j
     record component C::j
         address: offset 24 bytes from beginning of record
         atomic type, longword integer, size: 4 bytes
     record component A::j
         address: offset 4 bytes from beginning of record
         atomic type, longword integer, size: 4 bytes
     DBG>

オブジェクトに関する詳細情報を表示するには,SHOW SYMBOL/FULLコマンドを使用します。

現在,SHOW SYMBOLコマンドは修飾された名前をサポートしていない点に注意してください。 たとえば,次に示すコマンドは現在サポートされていません。

     SHOW SYMBOL    object_name.function_name

     SHOW SYMBOL    class_name::member_name

C.6.6 オブジェクトに関する情報の表示

デバッガはオブジェクトに関する情報を表示するために,C++のシンボル検索規則を使用します。 現在のオブジェクトの値を表示するには, EXAMINEコマンドを使用します。例を示します。

     DBG> EXAMINE a
     CXXDOCEXAMPLE\main\a: struct A
         i:  0
         j:  1
         __vptr:     131168

また,EXAMINEコマンドでメンバ・アクセス演算子であるピリオド(.)と右矢印(->) を使用することによって,個々のオブジェクト・メンバを表示することもできます。 例を示します。

     DBG> EXAMINE ptr
     CXXDOCEXAMPLE\main\ptr:         40
     DBG> EXAMINE *ptr
     *CXXDOCEXAMPLE\main\ptr: struct A
         i:  0
         j:  1
         __vptr:     131168
     DBG> EXAMINE a.i
     CXXDOCEXAMPLE\main\a.i: 0
     DBG> EXAMINE ptr->i
     CXXDOCEXAMPLE\main\ptr->i:      0
     DBG>

デバッガは,仮想的な継承を正しく解釈します。例を示します。

     DBG> EXAMINE c
     CXXDOCEXAMPLE\main\c: struct C
         inherit B1
             inherit virtual A
                 i:  8
                 j:  9
                 __vptr:     131200
             i:      10
             __vptr: 131232
             __bptr: 131104
         inherit B2
             inherit virtual A  (already printed, see above)
             i:      11
             __vptr: 131280
             __bptr: 131152
         j:  12
         __vptr:     131232
         __bptr:     131104
     DBG>

グローバル変数を参照したり,基底クラスの隠蔽メンバを参照したり,継承されたメンバを明示的に参照したり, 現在のコンテキストによって隠蔽されたメンバを命名したりするために, スコープ解決演算子(::)を使用します。 例を示します。

     DBG> EXAMINE c.j
     CXXDOCEXAMPLE\main\c.j: 12
     DBG> EXAMINE c.A::j
     CXXDOCEXAMPLE\main\c.A::j:      9
     DBG> EXAMINE x
     CXXDOCEXAMPLE\main\x:   101
     DBG> EXAMINE ::x
     CXXDOCEXAMPLE\x:        13
     DBG>

デバッガはあいまいなメンバ参照を解決するために,参照を満たすメンバをリスト表示して, メンバに対するあいまいでない参照の指定を求めます。 例を示します。

     DBG> EXAMINE c.i
     %DEBUG-I-AMBIGUOUS, 'i' is ambiguous, matching the following
         CXXDOCEXAMPLE\main\c.B1::i
         CXXDOCEXAMPLE\main\c.B2::i
     %DEBUG-E-REENTER, reenter the command using a more precise pathname
     DBG> EXAMINE c.B1::i
     CXXDOCEXAMPLE\main\c.B1::i:     10
     DBG>

静的なデータ・メンバを参照するには,スコープ解決演算子(::)を使用します。 例を示します。

     DBG> EXAMINE c.s
     CXXDOCEXAMPLE\main\c.s: 42
     DBG> EXAMINE C::s
     C::s:   42
     DBG>

オブジェクトのクラス型を表示するには,SHOW SYMBOL/FULLコマンドを使用します( 第C.6.5項を参照)。

C.6.7 ウォッチポイントの設定

オブジェクトのウォッチポイントを設定することができます。静的でないすべてのデータ・ メンバはウォッチされます(基底クラス中のデータ・メンバを含みます) 。オブジェクト上にウォッチポイントを設定すると,静的なデータ・ メンバはウォッチされません。ただし,静的なデータ・メンバについて, 明示的にウォッチポイントを設定することは可能です。例を示します。

     DBG> SET WATCH c
     %DEBUG-I-WPTTRACE, non-static watchpoint, tracing every instruction
     DBG> GO
     watch of CXXDOCEXAMPLE\main\c.i at CXXDOCEXAMPLE\main\%LINE 50+8
         50:     c.B2::i++;
        old value: 11
        new value: 12
     break at CXXDOCEXAMPLE\main\%LINE 51
         51:     c.s++;
     DBG> SET WATCH c.s
     DBG> GO
     watch of CXXDOCEXAMPLE\main\c.s at CXXDOCEXAMPLE\main\%LINE 51+16
         51:     c.s++;
        old value: 43
        new value: 44
     break at CXXDOCEXAMPLE\main\%LINE 53
         53:     b1.f();
     DBG>

C.6.8 デバッグ関数

デバッガはメンバ関数の情報を表示するために,C++シンボル検索ルールを使用します。 例を示します。

     DBG> EXAMINE /SOURCE b1.f
     module CXXDOCEXAMPLE
         14:     void f() {}
     DBG> SET BREAK B1::f
     DBG> GO
     break at routine B1::f
         14:     void f() {}
     DBG>

デバッガは,thisポインタに対する参照を正しく解釈します。例を示します。

     DBG> EXAMINE this
     B1::f::this:            16
     DBG> EXAMINE *this
     *B1::f::this: struct B1
         inherit virtual A
             i:      2
             j:      3
             __vptr: 131184
         i:  4
         __vptr:     131248
         __bptr:     131120
     DBG> EXAMINE this->i
     B1::f::this->i: 4
     DBG> EXAMINE this->j
     B1::f::this->A::j:      3
     DBG>EXAMINE i
     B1::f::this->i: 4
     DBG> EXAMINE j
     B1::f::this->A::j:      3
     DBG>

デバッガは,仮想メンバ関数を正しく参照します。例を示します。

     DBG> EXAMINE /SOURCE %LINE 53
     module CXXDOCEXAMPLE
         53:     b1.f();
     DBG> SET BREAK this->h
     DBG> SHOW BREAK
     breakpoint at routine B1::f
     breakpoint at routine B1::h

     !!
     !! We are at the call to B1::f made at 'c.B1::f()'.
     !! Here this->h matches C::h.
     !!
     DBG> GO
     break at routine B1::f
         14:     void f() {}
     DBG> EXAMINE /SOURCE %LINE 54
     module CXXDOCEXAMPLE
         54:     c.B1::f();
     DBG> SET BREAK this->h
     DBG> SHOW BREAK
     breakpoint at routine B1::f
     breakpoint at routine B1::h
     breakpoint at routine C::h

     !!
     !! Handling overloaded functions
     !!
     DBG> SET BREAK g
     %DEBUG-I-NOTUNQOVR, symbol 'g' is overloaded
     overloaded name C::g
            instance C::g(int)
            instance C::g(long)
            instance C::g(char)
     %DEBUG-E-REENTER, reenter the command using a more precise pathname
     DBG> SET BREAK g(int)

     DBG> CANCEL BREAK/ALL
     DBG>

オーバロードされた関数上にブレークを設定すると,デバッガは関数のインスタンスをリスト表示し, コンパイラが生成した固有のラベルを使って, 正しいインスタンスを指定するよう求めます。デバッガ・バージョン7.2 を使った例を示します。

     DBG> SET BREAK g
     %DEBUG-I-NOTUNQOVR, symbol 'g' is overloaded
     overloaded name C::g
            instance void g(int)
            instance void g(long)
            instance void g(char *)
     %DEBUG-E-REENTER, reenter the command using a more precise pathname
     DBG> SET BREAK g(int)
     DBG>

注意
オーバロードされた関数についての表示方法と指定方法は,OpenVMS デバッガ・バージョン7.1Cとは異なります。 デバッガ・バージョン7.1Cを使った例を示します。

デバッガは,コンストラクタ,デストラクタ,および演算子のデバッグをサポートします。 例を示します。

     DBG> SET BREAK C
     %DEBUG-I-NOTUNQOVR, symbol 'C' is overloaded
     overloaded name C
            instance C::C(void)
            instance C::C(const C &)
     %DEBUG-E-REENTER, reenter the command using a more precise pathname
     DBG> SHOW SYMBOL /FULL ~C
     routine C::~C
        type signature: ~C(void)
         code address: #, size: 152 bytes
         procedure descriptor address: #
     DBG> SET BREAK %NAME'~C'
     DBG> SET BREAK %NAME'=='
     %DEBUG-W-UNALLOCATED, '==' is not allocated in memory (optimized away)
     %DEBUG-E-CMDFAILED, the SET BREAK command has failed
     DBG> SHOW SYMBOL /FULL ==
     routine C::==
         type signature: int ==(C &)
         address: unallocated
     DBG> SHOW BREAK
     breakpoint at routine C::~C
     DBG>

C.6.9 C++デバッガ・サポートに関する制限事項

C++プログラムをデバッグする場合は,次の制限事項が適用されます。

例 C-1 C++プログラム例,CXXDOCEXAMPLE.C

int x = 0;

struct A
    {
    int i,j;
    void f() {}
    virtual void h() {};
    A() { i=x++; j=x++; }
    };
struct B1 : virtual A
    {
    int i;
    void f() {}
    virtual void h() {}
    B1() { i=x++; }
    };
struct B2 : virtual A
    {
    int i;
    void f() {}
    virtual void h() {}
    B2() { i=x++; }
    };
struct C : B1, B2
    {
    int j;
    static int s;
    void g( int ) {}
    void g( long ) {}
    void g( char * ) {}
    void h() {}
    operator ==( C& ) { return 0; }
    C() { j=x++; }
    ~C() {}
    };

int C::s = 42;
main()
    {
    A a; B1 b1; B2 b2; C c;
    A *ptr = &a;
    int x = 101;
    x++;

    c.s++;
    c.B2::i++;
    c.s++;

    b1.f();
    c.B1::f();
    }

例 C-2例 C-1 に含まれているプログラムのデバッグ・セッションの例です。

例 C-2 C++デバッグ例

DBG> GO
break at routine CXXDOCEXAMPLE\main
    44:     A a; B1 b1; B2 b2; C c;
DBG> STEP
stepped to CXXDOCEXAMPLE\main\%LINE 45
    45:     A *ptr = &a;
DBG> STEP
stepped to CXXDOCEXAMPLE\main\%LINE 46
    46:     int x = 101;
DBG> STEP
stepped to CXXDOCEXAMPLE\main\%LINE 47
    47:     x++;

!!
!! Displaying class information
!!
DBG> SHOW SYMBOL /TYPE C
type C
    struct (C, 13 components), size: 40 bytes
overloaded name C
       instance C::C(void)
       instance C::C(const C &)

DBG> SHOW SYMBOL /FULL C
type C
    struct (C, 13 components), size: 40 bytes
      inherits: B1, size: 24 bytes, offset: 0 bytes
                B2, size: 24 bytes, offset: 12 bytes
      contains the following members:
        overloaded name C::g
               instance C::g(int)
               instance C::g(long)
               instance C::g(char)
        j : longword integer, size: 4 bytes, offset: 24 bytes
        s : longword integer, size: 4 bytes, address: #  [static]
        overloaded name C
        int ==(C &)
        C & =(const C &)
        void h(void)   [virtual]
        ~C(void)
        __vptr : typed pointer type, size: 4 bytes, offset: 4 bytes
        __bptr : typed pointer type, size: 4 bytes, offset: 8 bytes
        structure has been padded, size: 4 bytes, offset: 36 bytes
overloaded name C
       instance C::C(void)
       instance C::C(const C &)

!!
!! Displaying information about base classes
!!
DBG> SHOW SYMBOL /FULL B1
type B1
    struct (B1, 8 components), size: 24 bytes
      inherits: virtual A
      is inherited by: C
      contains the following members:
        i : longword integer, size: 4 bytes, offset: 0 bytes
        overloaded name B1
        void f(void)
        B1 & =(const B1 &)
        void h(void)   [virtual]
        __vptr : typed pointer type, size: 4 bytes, offset: 4 bytes
        __bptr : typed pointer type, size: 4 bytes, offset: 8 bytes
        structure has been padded, size: 12 bytes, offset: 12 bytes
overloaded name B1
       instance B1::B1(void)
       instance B1::B1(const B1 &)

!!
!! Displaying class member information
!!
DBG> SHOW SYMBOL /FULL j
record component C::j
    address: offset 24 bytes from beginning of record
    atomic type, longword integer, size: 4 bytes
record component A::j
    address: offset 4 bytes from beginning of record
    atomic type, longword integer, size: 4 bytes

!!
!! Simple object display
!!
DBG> EXAMINE a
CXXDOCEXAMPLE\main\a: struct A
    i:  0
    j:  1
    __vptr:     131168
!!
!! Using *, -> and . to access objects and members
!!
DBG> EXAMINE ptr
CXXDOCEXAMPLE\main\ptr:         40
DBG> EXAMINE *ptr
*CXXDOCEXAMPLE\main\ptr: struct A
    i:  0
    j:  1
    __vptr:     131168
DBG> EXAMINE a.i
CXXDOCEXAMPLE\main\a.i: 0
DBG> EXAMINE ptr->i
CXXDOCEXAMPLE\main\ptr->i:      0

!!
!! Complicated object example
!!
DBG> EXAMINE c
CXXDOCEXAMPLE\main\c: struct C
    inherit B1
        inherit virtual A
            i:  8
            j:  9
            __vptr:     131200
        i:      10
        __vptr: 131232
        __bptr: 131104
    inherit B2
        inherit virtual A  (already printed, see above)
        i:      11
        __vptr: 131280
        __bptr: 131152
    j:  12
    __vptr:     131232
    __bptr:     131104

!!
!! The debugger using C++ symbol lookup rules (to match c.j)
!! and then the use of :: to specify a particular member named j.
!!
DBG> EXAMINE c.j
CXXDOCEXAMPLE\main\c.j: 12
DBG> EXAMINE c.A::j
CXXDOCEXAMPLE\main\c.A::j:      9

!!
!! Using the global scope resolution operator.
!!
DBG> EXAMINE x
CXXDOCEXAMPLE\main\x:   101
DBG> EXAMINE ::x
CXXDOCEXAMPLE\x:        13

!!
!! Handling ambiguous member references.
!!
DBG> EXAMINE c.i
%DEBUG-I-AMBIGUOUS, 'i' is ambiguous, matching the following
    CXXDOCEXAMPLE\main\c.B1::i
    CXXDOCEXAMPLE\main\c.B2::i
%DEBUG-E-REENTER, reenter the command using a more precise pathname
DBG> EXAMINE c.B1::i
CXXDOCEXAMPLE\main\c.B1::i:     10

!!
!! Refering to static data members: with . and with ::
!!
DBG> EXAMINE c.s
CXXDOCEXAMPLE\main\c.s: 42
DBG> EXAMINE C::s
C::s:   42

!!
!! Setting watchpoints on objects.  All non-static data members
!! are watched (including those in base classes).  Static data
!! members are not watched.  Of course watchpoints on static data
!! members can be set explicitly.
!!
DBG> SET WATCH c
%DEBUG-I-WPTTRACE, non-static watchpoint, tracing every instruction
DBG> GO
watch of CXXDOCEXAMPLE\main\c.i at CXXDOCEXAMPLE\main\%LINE 50+8
    50:     c.B2::i++;
   old value: 11
   new value: 12
break at CXXDOCEXAMPLE\main\%LINE 51
    51:     c.s++;
DBG> SET WATCH c.s
DBG> GO
watch of CXXDOCEXAMPLE\main\c.s at CXXDOCEXAMPLE\main\%LINE 51+16
    51:     c.s++;
   old value: 43
   new value: 44
break at CXXDOCEXAMPLE\main\%LINE 53
    53:     b1.f();

!!
!! Basic member lookup applies to functions.
!!
DBG> EXAMINE /SOURCE b1.f
module CXXDOCEXAMPLE
    14:     void f() {}
DBG> SET BREAK B1::f
DBG> GO
break at routine B1::f
    14:     void f() {}

!!
!! Support for 'this'.
!!
DBG> EXAMINE this
B1::f::this:            16
DBG> EXAMINE *this
*B1::f::this: struct B1
    inherit virtual A
        i:      2
        j:      3
        __vptr: 131184
    i:  4
    __vptr:     131248
    __bptr:     131120
DBG> EXAMINE this->i
B1::f::this->i: 4
DBG> EXAMINE this->j
B1::f::this->A::j:      3
DBG>EXAMINE i
B1::f::this->i: 4
DBG> EXAMINE j
B1::f::this->A::j:      3

!!
!! Support for virtual functions.
!!
!! We are at the call to B1::f made at 'b1.f()'.
!! Here this->h matches B1::h.
!!
DBG> EXAMINE /SOURCE %LINE 53
module CXXDOCEXAMPLE
    53:     b1.f();
DBG> SET BREAK this->h
DBG> SHOW BREAK
breakpoint at routine B1::f
breakpoint at routine B1::h

!!
!! We are at the call to B1::f made at 'c.B1::f()'.
!! Here this->h matches C::h.
!!
DBG> GO
break at routine B1::f
    14:     void f() {}
DBG> EXAMINE /SOURCE %LINE 54
module CXXDOCEXAMPLE
    54:     c.B1::f();
DBG> SET BREAK this->h
DBG> SHOW BREAK
breakpoint at routine B1::f
breakpoint at routine B1::h
breakpoint at routine C::h

!!
!! Handling overloaded functions
!!
DBG> SET BREAK g
%DEBUG-I-NOTUNQOVR, symbol 'g' is overloaded
overloaded name C::g
       instance C::g(int)
       instance C::g(long)
       instance C::g(char)
%DEBUG-E-REENTER, reenter the command using a more precise pathname
DBG> SET BREAK g(int)

DBG> CANCEL BREAK/ALL

!!
!! Working with constructors, destructors, and operators.
!!
DBG> SET BREAK C
%DEBUG-I-NOTUNQOVR, symbol 'C' is overloaded
overloaded name C
       instance C::C(void)
       instance C::C(const C &)
%DEBUG-E-REENTER, reenter the command using a more precise pathname
DBG> SHOW SYMBOL /FULL ~C
routine C::~C
   type signature: ~C(void)
    code address: #, size: 152 bytes
    procedure descriptor address: #
DBG> SET BREAK %NAME'~C'
DBG> SET BREAK %NAME'=='
%DEBUG-W-UNALLOCATED, '==' is not allocated in memory (optimized away)
%DEBUG-E-CMDFAILED, the SET BREAK command has failed
DBG> SHOW SYMBOL /FULL ==
routine C::==
    type signature: int ==(C &)
    address: unallocated
DBG> SHOW BREAK
breakpoint at routine C::~C
DBG> EXIT

C.7 C++

次の各節では,バージョン5.5よりも前のバージョンのC++コンパイラによってコンパイルされたC++ プログラムのデバッガによるサポートについて説明します。

バージョン5.5以降のバージョン(Alphaのみ)でコンパイルされたC++プログラムのデバッガによるサポートについては, 第C.6 節を参照してください。

C.7.1 %nameレキシカル関数

DEC C++で関数やデータ・メンバのような特定のエンティティを参照するには, デバッガ・コマンドで%nameレキシカル関数の使用が要求されます。 この関数を使用するときは,必ずコマンドと参照の間に置きます。次の各項で, この関数が必要な場合の正しい使用法の例を示します。

C.7.2 言語式の演算子

言語式でサポートされているC++の演算子を次に示します。

種類 シンボル 機能
接頭辞 * 間接参照
接頭辞 & アドレス
接頭辞 sizeof サイズ
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 % 剰余
挿入辞 << 左シフト
挿入辞 >> 右シフト
挿入辞 == 等値
挿入辞 != 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 < 小なり
挿入辞 <= 以下
接頭辞 ~ (チルド) ビット単位のNOT
挿入辞 & ビット単位のAND
挿入辞 | ビット単位のOR
挿入辞 ^ ビット単位の排他的OR
接頭辞 ! 論理否定
挿入辞 && 論理積
挿入辞 || 論理和

感嘆符(!)は演算子なので,C++プログラムではコメントの区切り文字としては使用できません。 ただし,デバッガのログ・ファイルをデバッガ入力として使用することを許可するために,! がスペースを除けば行の先頭にある場合にかぎって, デバッガは!をコメントの区切り文字として認識します。C++ 言語モードでは,デバッガは/*をコメントの区切り文字として受け入れます。 コメントは現在の行の最後まで続きます。対応する*/は不要ですし, 認識もされません。

デバッガは,アスタリスク(*)接頭辞をC++の言語式およびデバッガのアドレス式の両方で間接参照演算子として受け入れます。 言語がC++に設定されているときは, アドレス式では,* 接頭辞はピリオド(.) 接頭辞や@ 接頭辞と同義です。

デバッグ中のプログラムの誤修正を防ぐために,デバッガはC++およびその他のどの言語でも代入演算子を一切サポートしません。 したがって,= ,+=,-=,++, -- のような演算子は認識しません。記憶位置の内容を変更するには, 明示的なdeposit コマンドを使用しなければなりません。

C.7.3 言語式とアドレス式の構造

サポートされている,C++の言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
.(ピリオド) 構造体構成要素の選択
-> ポインタの間接参照

C.7.4 データ型

サポートされているC++のデータ型を次に示します。

C++のデータ型 オペレーティング・ データの名前
__int64 (Alpha固有) クォドワード(Q)
unsigned __int64 (Alpha固有) クォドワード符号なし(QU)
__int32 (Alpha固有) ロングワード整数(L)
unsigned __int32 (Alpha固有) ロングワード符号なし(LU)
int ロングワード整数(L)
unsigned int ロングワード符号なし(LU)
__int16 (Alpha固有) ワード整数(W)
unsigned __int16(Alpha固有) ワード符号なし(WU)
short int ワード整数(W)
unsigned short int ワード符号なし(WU)
char バイト整数(B)
unsigned char バイト符号なし(BU)
float F浮動小数点数(F)
__f_float (Alpha固有) F浮動小数点数(F)
double D浮動小数点数(D)
double G浮動小数点数(G)
__g_float (Alpha固有) G浮動小数点数(G)
float (Alpha 固有) IEEE S浮動小数点数(FS)
__s_float (Alpha固有) IEEE S浮動小数点数(FS)
double (Alpha固有) IEEE T浮動小数点数(FT)
__t_float (Alpha固有) IEEE T浮動小数点数(FT)
enum (なし)
struct (なし)
ラベル (なし)
ポインタ型 (なし)
配列型 (なし)

++ Alpha固有です。

float型の浮動小数点数は,コンパイラのスイッチによって,F浮動小数点数またはIEEE S 浮動小数点数のどちらかで表されます。

double型のの浮動小数点数は,コンパイラのスイッチによって,IEEE T浮動小数点数,D 浮動小数点数,またはG浮動小数点数のどれかで表されます。

C.7.5 大文字小文字の区別

C++言語では,シンボル名の大文字と小文字は区別され,それぞれ別個の文字として処理されます。

C.7.6 修飾子がついたクラス名

次の各項では,デバッガを使用するときのクラス・メンバの名前の作成方法を説明するために, 修飾子がついたクラス名という用語を使用します。 あるクラスが別のクラスで定義されていなければ,修飾子がついたクラス名はそのクラス自身の名前にすぎません。 しかし,もしこのクラスが別のクラス内でネストされていれば, そのネストのすぐ外のクラスの名前を前に付けなければなりません。 このとき,区切り文字として一対のコロン(::) を使用します。外側のクラスもネストされている場合は, その名前も前に付けなければなりません。

適切な修飾子がついたクラス名の例を次に示します。

     DBG> set break %name 'C::f'             ! f is a member of class C
     DBG> set break %name 'FOO::BAR::BAZ::g' ! g is a member of BAZ,
                                             ! which is nested in BAR,
                                             ! which is nested in FOO

C.7.7 C++のデータに対するデバッガの使用法

本項では,C++のデータに対するデバッガの使用法を説明します。

C.7.7.1 非静的データ・メンバ

本項では,静的とは宣言されていないデータ・メンバを参照する方法を説明します。

C.7.7.1.1 継承されないデータ・メンバ

C++のクラスまたはstructかunionで直接定義されている非静的データ・メンバを参照するには, その名前を,C言語のstructメンバやunionメンバの場合と同じように使用します。 非静的データ・メンバ参照の正しい使用法を次の例で示します。

     DBG> examine x.m, p->m

C.7.7.1.2 継承されるデータ・メンバ

現在のところ,デバッガのサポートでは,各種の基底クラスから継承される非静的データ・ メンバを区別するのに,メンバに至る継承パス,さらにメンバが宣言されているクラスに至る継承パス上の 重要な基底クラス名をメンバ名の前に付けます。 オブジェクトからメンバに至るパスの上の基底クラスが多重継承を使用して受け継がれたものなら, 当基底クラスは重要です。 したがって,2つ以上の基底指定子が含まれている基底リストで基底クラスが言及されていれば, その基底クラスは重要です。

この表記法では,基底クラスに至る継承パスを記述するための必要最少限の数の基底クラス接頭辞を作成します。 つまりこの表記法では,パスをたどっていくときに次に進む先を選ぶために必要な基底クラスだけを命名するからです。 多重継承を行わないときは,参照は次の形式を取ります。

     %name'CLASS::member'

オブジェクトの基底クラスから継承された非静的データ・メンバを参照するには,%name で二重コロンで区切った一連の修飾子がついた重要な基底クラス名とメンバ名を引用符で囲みます。 一連の重要な基底クラスを指定する順序は, オブジェクトの最も疎遠の重要クラスからオブジェクトに最も近い重要基底クラスへという順序です。 たとえば,次の宣言の継承図式を考えてみましょう。

     struct A { int a_member; };
     struct B : A { int b_member; };
     struct C { int c_member; };
     struct D : B, C { int d_member; };
     struct E : D { int e_member; };
     struct F { int f_member; };
     struct G : F { int g_member; };
     struct H : E, G { int h_member; };
     struct I : H { int i_member; };
     struct J : I { int j_member; };

     static J j_object;

多重継承の行われる基底リストでクラスB,C,E,およびGが言及されているので, これらのクラスは接頭辞として現れる重要クラスです。次の例は, デバッガのdepositコマンドですべてのメンバを参照しています。継承されたメンバが重要なクラスに属するかどうかに関係なく, そのメンバ自身のクラスはメンバ名の前に出現することに注意してください。

C.7.7.1.3 継承される仮想データ・メンバ

デバッガでは,仮想基底クラスのデータ・メンバへのシンボリック・アクセスは現在サポートされていません。 ただし,例外がひとつあります。それは,__bptr という名前のポインタ・メンバがそのようなオブジェクトの中にあるということです。

C.7.7.2 静的データ・メンバ

静的データ・メンバを参照するには,%nameで,その修飾子がついたクラス名,2 つのコロン(::),およびメンバ名を引用符で囲ます。

静的データ・メンバ参照の正しい使用法を次の例で示します。

     DBG> examine %name 'C::s'
     DBG> examine %name 'FOO::BAR::BAZ::sdm'

C.7.7.3 参照オブジェクトと参照メンバ

参照で宣言されたオブジェクトの値にアクセスするには,そのオブジェクトの名前を使用します。

デバッガは,参照型で宣言されたデータ・メンバをポインタ変数であるかのように扱います。 したがって,そのメンバ名には間接参照演算子の * または-> を使用しなければなりません。

次に例を示します。

     class C {
     public:
         int &ref_mem;
         C(int &arg) : ref_mem(arg) {}
     };

     main()
     {
         auto int obj = 5;
         auto int &ref_obj = obj;
         auto C c(obj);
         obj = 23;
     }
      . . .

メンバをチェックするためにデバッガを使用するための正しい方法を次のシーケンスで示します。

     stepped on return from routine REF\main
       to REF\main\%LINE 13+16
         13: }
     DBG> examine obj, ref_obj
     REF\main\obj:   23
     REF\main\ref_obj:       23
     DBG> examine c
     REF\main\c
         ref_mem:    2144211292
     DBG> symbolize c.ref_mem
     address 7FCE1154:
         REF\main\c
     DBG> examine *c.ref_mem
     *REF\main\c.ref_mem:    23

C.7.7.4 メンバを指すポインタ

メンバを指すポインタであるオブジェクトは,64ビットの整数で表されます。

C.7.7.5 型によるエンティティの参照

オブジェクトやメンバの値を型でチェックし,表示するには,EXAMINE /TYPEというコマンドを使用します。同様に,DEPOSIT/TYPEというコマンドを使用することにより, 指定した型に格納する式の値を修正できます。/TYPE 修飾子を使用する場合,これらのコマンドの構文は次のとおりです。

     deposit/type=(name)
     examine/type=(name)

nameで示された型は,プログラムで宣言された変数の名前またはデータ型の名前でなければなりません。 /type 修飾子は, 特に2つ以上の型で宣言されたC++のオブジェクトを参照するときに役立ちます。

C.7.8 C++の関数に対するOpenVMSデバッガの使用

本項では,各種の関数や関数の引数を参照する方法を説明します。

C.7.8.1 オーバロードされた関数

コードの中で関数のシンボリック名を見つけるには,SHOW SYMBOLコマンドを使用します。 関数がオーバロードされている場合は,オーバロードされているシンボリック名を表示するために, 名前の指定でワイルドカード文字(*) を使用します。

次に例を示します。

     class base
       {
       public:
         base();
         base( int );

         ~base();

         int base_f1();

         void base_f2();
         void base_f2( int );
         void base_f2( char );
        };

オーバロードされている記号を表示し,適当な関数参照を決定する方法を次のシーケンスで示します。

     DBG> set break %name 'base::base_f2'
     %DEBUG-E-NOTUNQOVR, symbol 'base::base_f2' is overloaded
             use SHOW SYMBOL to find the unique symbol names

     DBG> show symbol *base_f2
     overloaded symbol CXX_T10_179\base::base_f2
       overloaded instance CXX_T10_179\base::base_f2__1
       overloaded instance CXX_T10_179\base::base_f2__2
       overloaded instance CXX_T10_179\base::base_f2__3
     DBG> set break %name 'base::base_f2__2'

     DBG> step
     stepped to CXX_T10_179\main\%LINE 20
         20:     x.base_f2();
     DBG> step
     stepped to CXX_T10_179\main\%LINE 21
         21:     x.base_f2(5);

     DBG> step
     break at routine CXX_T10_179\base::base_f2__2
         12:     void base_f2( int ) {}
     DBG> step
     stepped to CXX_T10_179\main\%LINE 22
         22:     x.base_f2('W');
     stepped to CXX_T10_179\main\%LINE 22
     DBG> go
     'Normal successful completion'
     DBG> ^Z

C.7.8.2 静的メンバ関数および非静的メンバ関数の参照

メンバ関数を参照するには,%nameで,その修飾子がついているクラス名,2 つのコロン(::),およびメンバ関数の名前を引用符で囲みます。 メンバ関数がオーバロードされている場合は,接尾辞__ integer-numberを付けます。

メンバ関数参照の正しい使用法を次の例で示します。

     DBG> set break %name 'MYSTRING::length'
     DBG> set break %name 'MYCOMPLEX::format__1', %name
           'MYCOMPLEX::format__2'

C.7.8.3 コンストラクタの参照

コンストラクタを参照するには,その名前を使用します。コンストラクタがオーバロードされている場合は, 接尾辞__ integer- numberを付けます。

コンストラクタ参照の正しい方法を次の例で示します。

     DBG> set break FOO
     DBG> set break MYSTRING__1

C.7.8.4 デストラクタの参照

デストラクタを参照するには,%name で,その名前と共にチルド( ~ )を引用符で囲みます。

デコンストラクタ参照の正しい方法を次の例で示します。

     DBG> set break %name '~FOO'

C.7.8.5 変換の参照

クラスSRCから型destへの変換を行うための演算子を参照するには,%name でSRC,2つのコロン(::),それからdestを引用符で囲みます。

次の1組の名前から基本型が抽出されます。

     void            char   signed_char   unsigned_char   signed_short
     unsigned_short  int    signed_int    unsigned_int    signed_long
     unsigned_long   float  double        long_double

ポインタ型は(type)*と名付けられています。参照型は(type)&と名付けられています。struct ,union class,およびenumという型は,それぞれのタグで名付けられます。 型の前には,修飾子constおよびvolatileが付き, 修飾子と修飾子の間にはスペースが1文字入ります。次に例を示します。

     DBG> set break %name 'C::int', %name 'C::(const S)&'

C.7.8.6 ユーザ定義演算子の参照

次の演算子はユーザ定義関数によりオーバロードされることがあります。

     +     -      *     /       %      ^      &      |      ~       !
     =     <      >     +=      -=     *=     /=     %=     ^=      &=
     |=    <<     >>    >>=     <<=    ==     !=     <=     >=      &&
     |     ++     --    ->*     ,      ->     []     ()     delete  new

詳細については,C++のマニュアルと共に提供される『The Annotated C++ Reference Manual』の7.2節を参照してください。

そのようなユーザ定義関数を参照するには,ユーザ定義演算子がメンバ関数の場合は,%name で演算子文字を引用符で囲みます。通常の関数の場合と同じように,%name に続いて引用符付きで文字列,修飾子がついたクラス名,2 つのコロン(::)を指定します。同様に,関数がオーバロードされている場合は, 接尾辞__ integer_numberを演算子文字に付けます。 特に,+ のような演算子が単項演算子や二項演算子として定義されている場合や, ++- が接頭辞として定義されている場合は,この接尾辞が必要です。

ユーザ定義関数参照の正しい使用法を次の例で示します。

     DBG> set break %name 'MYSTRING::+'
     DBG> set break %name 'COUNTER::++__1', %name 'COUNTER::++__2'

C.7.8.7 関数の引数の参照

デバッガによる参照では,this*this,および this-> を次のように使用します。

C.8 COBOL

次の各サブトピックでは,デバッガによるCOBOLのサポートについて説明します。

C.8.1 言語式の演算子

言語式でサポートされているCOBOLの演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 ** べき乗(VAX固有)
挿入辞 = 等値
挿入辞 NOT = 不等
挿入辞 > 大なり
挿入辞 NOT < 以上
挿入辞 < 小なり
挿入辞 NOT > 以下
挿入辞 NOT 論理否定
挿入辞 AND 論理積
挿入辞 OR 論理和

C.8.2 言語式とアドレス式の構造

サポートされているCOBOLの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 添字指定
OF レコードの構成要素の選択
IN レコードの構成要素の選択

C.8.3 データ型

サポートされているCOBOLのデータ型を次に示します。

COBOLのデータ型 VMSのデータ型名
COMP ロングワード整数(L,LU)
COMP ワード整数(W,WU)
COMP クォドワード整数(Q,QU)
COMP-1 F浮動小数点数(F)
COMP-1 (Alpha 固有) IEEE S浮動小数点数(FS)
COMP-2 D浮動小数点数(D)
COMP-2 (Alpha固有) IEEE T浮動小数点数(FT)
COMP-3 パック10 進数(P)
INDEX ロングワード整数(L)
英数字 ASCII テキスト(T)
レコード (なし)
数値符号なし 数値文字列, 符号なし(NU)
先行分離記号 数値文字列,左分離記号(NL)
先行オーバパンチ記号 数値文字列,左オーバパンチされた記号(NLO)
終了分離記号 数値文字列,右分離記号(NR)
後続オーバパンチ記号 数値文字列,右オーバパンチされた記号(NRO)

COMP-1型の浮動小数点数は,コンパイラのスイッチによって,F浮動小数点数またはIEEE S 浮動小数点数のどちらかで表現されます。

COMP-2型の浮動小数点数は,コンパイラのスイッチによって,D浮動小数点数またはIE EE T 浮動小数点数のどちらかで表現されます。

C.8.4 ソース表示

デバッガは,COPY文またはCOPY REPLACING文でプログラムに取り込まれたソース・ テキストを表示することができます。しかし,COPY REPLACING文またはREPLACE 文を使用した場合は,COPY REPLACING文またはREPLACE文で作成された修正後のソース・ テキストではなく,元のソース・テキストが表示されます。

デバッガは,REPORT節のコードに対応する元のソース行を表示することはできません。REPORT に対応するDATA SECTIONのソース行を見ることはできますが, レポートを作成するためのコンパイル済みコードに対応するソース行は表示されません。

C.8.5 COBOLのINITIALIZE文と大きいテーブル( 配列) (Alphaのみ)

OpenVMS Alphaシステムでは,大きいテーブル(配列)が初期化されるときに,STEP コマンドを使用してCOBOLプログラムでINITIALIZE文を実行する場合, デバッガは非常に長い時間と多くのリソースを使用することがあります。

この問題を回避するには,INITIALIZE文をステップ実行するのではなく, INITIALIZE文の後の最初の実行可能な行にブレークポイントを設定します。

C.9 DIBOL (VAXのみ)

次の各サブトピックでは,デバッガによるDIBOLのサポートについて説明します。

C.9.1 言語式の演算子

言語式でサポートされているDIBOLの演算子を次に示します。

種類 シンボル 機能
接頭辞 # 丸め
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 // 商が小数となる除算
挿入辞 .EQ. 等値
挿入辞 .NE. 不等
挿入辞 .GT. 大なり
挿入辞 .GE. 以上
挿入辞 .LT. 小なり
挿入辞 .LE. 以下
挿入辞 .NOT. 論理否定
挿入辞 .AND. 論理積
挿入辞 .OR. 論理和
挿入辞 .XOR. 排他的論理和

C.9.2 言語式とアドレス式の構造

サポートされているDIBOLの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 部分文字列
[ ] 添字指定
.(ピリオド) レコードの構成要素の選択

C.9.3 データ型

サポートされているDIBOLのデータ型を次に示します。

DIBOLのデータ型 VMSのデータ型名
I1 バイト整数(B)
I2 ワード整数(W)
I4 ロングワード整数(L)
Pn パック10進数文字列(P)
Pn.m パック10進数文字列(P)
Dn 数値文字列,ゾーン記号(NZ)
Dn.m 数値文字列,ゾーン記号(NZ)
An ASCIIテキスト(T)
配列 (なし)
レコード (なし)

C.10 Fortran

次の各サブトピックでは,デバッガによるFortranのサポートについて説明します。

C.10.1 言語式の演算子

言語式でサポートされているFortranの演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 ** べき乗(VAX固有)
挿入辞 // 連結
挿入辞 .EQ. 等値
挿入辞 == 等値
挿入辞 .NE. 不等
挿入辞 /= 不等
挿入辞 .GT. 大なり
挿入辞 > 大なり
挿入辞 .GE. 以上
挿入辞 >= 大なりまたは等値
挿入辞 .LT. 小なり
挿入辞 < 小なり
挿入辞 .LE. 以下
挿入辞 <= 小なりまたは等値
接頭辞 .NOT. 論理否定
挿入辞 .AND. 論理積
挿入辞 .OR. 論理和
挿入辞 .XOR. 排他的論理和
挿入辞 .EQV. 同値
挿入辞 .NEQV. 排他的論理和

C.10.2 言語式とアドレス式の構造

サポートされているFortranの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 添字指定
.(ピリオド) レコードの構成要素の選択
% (パーセント記号) レコードの構成要素の選択

C.10.3 定義済みのシンボル

サポートされているFortranの定義済みのシンボルを次に示します。

シンボル 説明
.TRUE. 論理値TRUE
.FALSE. 論理値FALSE

C.10.4 データ型

サポートされているFortranのデータ型を次に示します。

Fortranのデータ型 VMSのデータ型名
LOGICAL*1 バイト符号なし(BU)
LOGICAL*2 ワード符号なし(WU)
LOGICAL*4 ロングワード符号なし(LU)
LOGICAL*8(Alpha 固有) クォドワード符号なし(QU)
BYTE バイト(B)
INTEGER*1 バイト整数(B)
INTEGER*2 ワード整数(W)
INTEGER*4 ロングワード整数(L)
INTEGER*8(Alpha固有) クォドワード整数(Q)
REAL*4 F 浮動小数点数(F)
REAL*4(Alpha固有) IEEE S浮動小数点数(FS)
REAL*8 D浮動小数点数(D)
REAL*8 G浮動小数点数(G)
REAL*8 (Alpha固有) IEEE T浮動小数点数(FT)
REAL*16 (Alpha固有) H浮動小数点数(H)
COMPLEX*8 F複素数(FC)
COMPLEX*8 (Alpha固有) IEEE S浮動小数点数(SC)
COMPLEX*16 D複素数(DC)
COMPLEX*16 G複素数(GC)
COMPLEX*16 (Alpha固有) IEEE T浮動小数点数(TC)(Alpha固有)
CHARACTER ASCIIテキスト(T)
配列 (なし)
レコード (なし)

LOGICALデータ型を表すのに内部的にはVMSの符号なし整数のデータ型(BU ,WU,LU,QU)が使用されるとしても,LOGICAL変数およびLOGICAL の値が言語式で使用されている場合は,デバッガはコンパイラと同様にLOGICAL の変数および値を符号付きとして処理します。

デバッガはLOGICAL変数およびLOGICAL式の値を.TRUE.や.FALSE.ではなく, 数値でプリントします。LOGICALの変数や値で有効なのは,通常は下位ビットだけで,0 が.FALSE.,1が.TRUE.です。しかし,Fortranでは, LOGICALの値のすべてのビットを操作することが許されており,言語式の中でLOGICAL の値を使用することができます。この理由から,LOGICAL変数やLOGICAL 式の整数値全体を見なければならない場合があるので,デバッガがそれを表示します。

(1.0,2.0)などのCOMPLEX定数は,デバッガの式ではサポートしていません。

REAL*4型およびCOMPLEX*8型の浮動小数点数は,コンパイラのスイッチに応じて,F 浮動小数点数またはIEEE S浮動小数点数で表現されることがあります。

REAL*8型およびCOMPLEX*16型の浮動小数点数は,コンパイラのスイッチに応じて,D 浮動小数点数,G浮動小数点数,またはIEEE T浮動小数点数で表現されることがあります。

OpenVMS Alphaシステムでは,デバッガは複素数変数を含む式を評価できません。 この問題を回避するには,複素数変数の内容を調べ,EXAMINEコマンドによって表示された複素数変数の実数部と虚数部を使用して, 式を評価します。

C.10.5 初期化コード

/CHECK=UNDERFLOW修飾子または/PARALLEL修飾子を使用してコンパイルしたプログラムをデバッグする場合には, 次の例に示すようなメッセージが表示されます。

     DBG> RUN FORMS
     Language: FORTRAN, Module: FORMS
     Type GO to reach main program
     DBG>

"Type GO to reach MAIN program"というメッセージは,メイン・プログラムを開始する前に実行が中断されるため, デバッガの制御のもとで初期化コードを実行できることを示します。GO コマンドを入力すると,メイン・ プログラムの先頭に設定されます。その時点で,GOコマンドを入力すると, 他のFortranプログラムの場合と同様に,プログラムの実行を開始できます。

C.11 MACRO-32

次の節では,デバッガによるMACRO-32のサポートについて説明します。

C.11.1 言語式の演算子

MACRO-32言語には,高級言語の式と同じ意味での式というものはありません。 受け入れられるのはアセンブリ時の式と,限られた数の演算子だけです。 デバッグ時にMACRO-32のプログラミングで,他の言語の場合と同じくらい自由に式を使用できるようにするため, デバッガは,MACRO-32自体には含まれていない多数の演算子をMACRO-32 の言語式の中で受け入れるようになっています。 特に,BLISS以後にモデル化された比較演算子とブール演算子はすべて受け入れます。 間接参照演算子と通常の算術演算子も受け入れられます。

種類 シンボル 機能
接頭辞 @ 間接参照
接頭辞 . 間接参照
接頭辞 + 単項正符号
接頭辞 - 単項負符号( 否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 MOD 剰余
挿入辞 @ 左シフト
挿入辞 EQL 等値
挿入辞 EQLU 等値
挿入辞 NEQ 不等
挿入辞 NEQU 不等
挿入辞 GTR 大なり
挿入辞 GTRU 大なり符号なし
挿入辞 GEQ 以上
挿入辞 GEQU 以上符号なし
挿入辞 LSS 小なり
挿入辞 LSSU 小なり符号なし
挿入辞 LEQ 以下
挿入辞 LEQU 以下符号なし
接頭辞 NOT ビット単位のNOT
挿入辞 AND ビット単位のAND
挿入辞 OR ビット単位のOR
挿入辞 XOR ビット単位の排他的論理和
挿入辞 EQV ビット単位の同値

C.11.2 言語式とアドレス式の構造

サポートされている,MACRO-32の言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
<p,s,e> BLISS同様のビットフィールドの選択

MACRO-32アセンブラが作成するDST情報では,記憶域を割り当てるアセンブラ指示文の前にあるラベルは, そのラベルが変数名である配列変数として扱われます。 その結果,このようなデータを検査または操作するときに, 高級言語の配列の構文を使用することができます。

次のMACRO-32ソース・コードの例では,4個のワードに格納されている16 進数のデータをLAB4ラベルで指定しています。

     LAB4:    .WORD    ^X3F,5[2],^X3C

デバッガはLAB4を配列変数として処理します。たとえば次のコマンドは, 各要素(ワード)に格納されている値を表示します。

     DBG> EXAMINE LAB4
     .MAIN.\MAIN\LAB4
         [0]:        003F
         [1]:        0005
         [2]:        0005
         [3]:        003C

次のコマンドは,4番目のワードに格納されている値を表示します。1番目のワードは要素"0" で表されます。

     DBG> EXAMINE LAB4[3]
     .MAIN.\MAIN\LAB4[3]:    03C

C.11.3 データ型

MACRO-32は,データ型をラベル名にバイトします。バインドは,ラベル定義に続くアセンブラ指示文に従って行なわれます。 サポートされているMACRO-32 の指示文を次に示します。

MACRO-32の指示文 VMSのデータ型名
.BYTE バイト符号なし(BU)
.WORD ワード符号なし(WU)
.LONG ロングワード符号なし(LU)
.SIGNED_BYTE バイト整数(B)
.SIGNED_ WORD ワード整数(W)
.LONG ロングワード整数(L)
.QUAD クォドワード整数(Q)
.F_FLOATING F浮動小数点数(F)
.D_FLOATING D浮動小数点数(D)
.G_ FLOATING G浮動小数点数(G)
.H_FLOATING H浮動小数点数(H)(VAX固有)
(該当なし) パック10 進数(P)

C.11.4 MACRO-32コンパイラ(AMACRO) (Alpha専用)

MACRO-32で記述したアプリケーションをAlphaシステムに移植する場合は,MACRO-32 コンパイラ(AMACRO)を使用します。MACRO-32でコンパイルされたコードをデバッグするためのデバッグ・ セッションは,アセンブルされたコードの場合に似ていますが, 本項で説明するような重要な相違もあります。 これらのアプリケーションを移植する場合の説明については, 『Porting VAX MACRO Code from OpenVMS VAX to OpenVMS Alpha』を参照してください。

C.11.4.1 コードの再配置

大きな相違は,コードがコンパイルされているという事実です。VAXシステムでは,MACRO-32 の各命令は単一のマシン命令です。Alphaシステムでは,MACRO-32 の各命令は,Alphaの複数のマシン命令へとコンパイルされることがあります。 この相違によって大きな副作用が生じます。それは, コンパイル・コマンドで/NOOPTIMIZEを指定しない場合,コードの再配置と再スケジューリングが行われるということです。 コードのデバッグが終わってから,/NOOPTIMIZE を指定しないでリコンパイルすることにより性能を改善できます。

C.11.4.2 シンボリック変数

コンパイルされたコードをデバッグする場合とアセンブルされたコードをデバッグする場合とには, 他にも大きな相違があります。それは, MACRO-32にとっての新しいコンセプトである,ルーチンの引数を調べるためのシンボリック変数の定義です。VAX システムでは,ルーチンをデバッグしていて, 引数をチェックしたくなったら,通常は,次のような入力を行うと考えられます。

             DBG> EXAMINE @AP        ; to see the argument count
             DBG> EXAMINE @AP+4      ; to examine the first arg

また,次のような入力をすることも考えられます。

             DBG> EXAMINE @AP        ; to see arg count
             DBG> EXAMINE .+4:.+20   ; to see first 5 args

Alphaシステムでは,引数はメモリ内のベクタには常駐していません。これがVAX システムとは異なる点です。さらにはまた,AlphaシステムにはAP レジスタがありません。MACROでコンパイルしたコードをデバッグしているときに,EXAMINE @AP と入力すると,デバッグは,APは未定義シンボルであるというメッセージを発行します。

コンパイルしたコードでは,引数は,次に述べる項目を組み合せたものとして常駐することができます。

作成されたコードを読み出して引数を検索することをコンパイラがユーザに要求することはありません。 コンパイラには,引数の正しい位置を指し示す$ARG nシンボルがあります。$ARG0は,VAXシステムの@AP+0と同じもの, つまり引数の個数です。たとえば$ARG1は最初の引数,$ARG2は2 番目の引数です。これらの引数は,CALL_ENTRY指示文およびJSB_ENTRY指示文で定義されますが,EXCEPTION_ENTRY 指示文では定義されません。

C.11.4.3 $ARGnシンボルを使用しない引数検索

ユーザのコードで,コンパイラが$ARGnシンボルを作成しない追加の引数が使用されることがあります。.CALL_ENTRY ルーチンに対して定義される$ARG nシンボルの個数は,コンパイラが自動検出またはMAX_ARGS によって検出した最大値または16のどちらか小さい方です。.JSB_ENTRY ルーチンの場合,引数は呼び出す側のスタック・フレーム内のホーム・ ポジションにあり,コンパイラは実際の数を検出できないので,$ARG nシンボルを常に8個作成します。

ほとんどの場合,追加の引数は容易に見つけられますが,そうでない場合もあります。

C.11.4.4 検索しやすい引数

次の場合は,追加の引数は容易に見つけられます。

たとえば,次のようにすればJSBルーチン内の8番目の引数より先にある引数を調べることができます。 この場合,引数リストのホーム・ポジションへのセットは呼び出す側で行うことが必要です。

       DBG> EX $ARG8  ; highest defined $ARGn
       .
       .
       .
       DBG> EX .+4  ; next arg is in next longword
       .
       .
       .
       DBG> EX .+4  ; and so on

この例では,引数リストをホーム・ポジションにセットするときに呼び出す側が少なくとも10 個の引数を検出したと想定しています。

引数のホーム・ポジションをセットしなかったルーチンの最後の$ARG nシンボルより先の引数を見つけるには,上記の例でEX .+4をEX .+8で置き換えた後,例に示すとおりに実行します。

C.11.4.5 検出しにくい引数

次の場合は,追加の引数を見つけるのは容易ではありません。

これらのケースで追加の引数を見つける方法は,コンパイルされたマシン・ コードを調べ,引数がどこに常駐しているかを判断することです。チェックしたい引数の最大値に対してMAX_ARGS が正しく指定されていれば, どちらの問題も解消します。

C.11.4.6 浮動小数点数データ付きのコードのデバッグ

Alphaシステムで浮動小数点数データ付きの,コンパイルされたMACRO-32 コードをデバッグする際の重要な情報を次に説明します。

C.11.4.7 パック10進数データ付きのコードのデバッグ

Alphaシステムでパック10進数データ付きの,コンパイルされたMACRO-32 コードをデバッグする際の重要な情報を次に説明します。

C.12 MACRO-64 (Alphaのみ)

以下の各節では,デバッガによるMACRO-64のサポートについて説明します。

C.12.1 言語式の演算子

MACRO-64言語には,高級言語と同じ意味での式というものはありません。 受け入れられるのはアセンブリ時の式と,限られたセットの演算子だけです。 デバッグ時にMACRO-64 のプログラミングで,他の言語の場合と同じくらい自由に式を使用できるようにするため, デバッガは,MACRO-64自体には含まれていない多数の演算子をMACRO-64 の言語式の中で受け入れるようになっています。 特に,BLISS以後にモデル化された比較演算子とブール演算子のセットは完全に受け入れます。 間接参照演算子と通常の算術演算子も受け入れられます。

種類 シンボル 機能
接頭辞 @ 間接参照
接頭辞 . 間接参照
接頭辞 + 単項正符号
接頭辞 - 単項負符号( 否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 MOD 剰余
挿入辞 @ 左シフト
挿入辞 EQL 等値
挿入辞 EQLU 等値
挿入辞 NEQ 不等
挿入辞 NEQU 不等
挿入辞 GTR 大なり
挿入辞 GTRU 大なり符号なし
挿入辞 GEQ 以上
挿入辞 GEQU 以上符号なし
挿入辞 LSS 小なり
挿入辞 LSSU 小なり符号なし
挿入辞 LEQ 以下
挿入辞 LEQU 以下符号なし
接頭辞 NOT ビット単位のNOT
挿入辞 AND ビット単位のAND
挿入辞 OR ビット単位のOR
挿入辞 XOR ビット単位の排他的論理和
挿入辞 EQV ビット単位の同値

C.12.2 言語式とアドレス式の構造

サポートされている,MACRO-64の言語式とアドレス式の構造を次に示します。

シンボル 構造
<p,s,e> BLISS同様のビットフィールド

C.12.3 データ型

MACRO-64は,データ型をラベル名にバインドします。バインドは,ラベル定義に続くアセンブラ指示文に従って行われます。 たとえば,次のコード内の.LONG データ指示文は,ロングワード整数データ型をラベルV1,V2, およびV3にバインドするようMACRO-64に対して指示します。

     .PSECT A, NOEXE
     .BYTE 5
     V1:
     V2:
     V3: .LONG 7

V1,V2,およびV3にバインドされている型を確認するには,SHOW SYMBOL /TYPEコマンドをV*パラメータ付きで実行します。実行結果の表示は次のとおりです。

        data  .MAIN.\V1
           atomic type, longword integer, size: 4 bytes
        data .MAIN.\V2
           atomic type, longword integer, size: 4 bytes
        data .MAIN.\V3
           atomic type, longword integer, size: 4 bytes)

サポートされているMACRO-64の指示文を次に示します。

MACRO-64のデータ型 VMSのデータ型名
.BYTE バイト符号なし(BU)
.WORD ワード符号なし(WU)
.LONG ロングワード符号なし(LU)
.SIGNED_BYTE バイト整数(B)
.SIGNED_ WORD ワード整数(W)
.LONG ロングワード整数(L)
.QUAD クォドワード整数(Q)
.F_FLOATING F浮動小数点数(F)
.D_FLOATING D浮動小数点数(D)
.G_FLOATING G浮動小数点数(G)
.S_FLOATING (Alpha固有) S浮動小数点数(S)
.T_FLOATING (Alpha固有) T浮動小数点数(T)
(該当なし) パック10 進数(P)

C.13 PASCAL

以下の各サブトピックでは,デバッガによるPascalのサポートについて説明します。

C.13.1 言語式の演算子

言語式でサポートされているPascalの演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算,連結
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 実数の除算
挿入辞 DIV 整数の除算
挿入辞 MOD モジュロ
挿入辞 REM 剰余
挿入辞 ** べき乗(VAX固有)
挿入辞 IN 集合メンバーシップ
挿入辞 = 等値
挿入辞 <> 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 < 小なり
挿入辞 <= 以下
接頭辞 NOT 論理否定
挿入辞 AND 論理積
挿入辞 OR 論理和

+ VAX固有

型キャスト演算子(::)は,言語式ではサポートされていません。

C.13.2 言語式とアドレス式の構造

サポートされている,Pascalの言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
.(ピリオド) レコードの構成要素の選択
^(サーカンフレックス) ポインタの間接参照

C.13.3 定義済みのシンボル

サポートされている,Pascalの定義済みのシンボルを次に示します。

シンボル 意味
TRUE 論理値TRUE
FALSE 論理値FALSE
NIL NILポインタ

C.13.4 組み込み関数

サポートされている,Pascalの組み込み関数を次に示します。

シンボル 意味
SUCC 論理的後続データ
PRED 論理的先行データ

C.13.5 データ型

サポートされているPascalのデータ型を次に示します。

Pascalのデータ型 VMSのデータ型名
INTEGER ロングワード整数(L)
INTEGER ワード整数(W,WU)
INTEGER バイト整数(B,BU)
UNSIGNED ロングワード符号なし(LU)
UNSIGNED ワード符号なし(WU)
UNSIGNED バイト符号なし(BU)
SINGLE,REAL F 浮動小数点数(F)
REAL(Alpha固有) IEEE S浮動小数点数(FS)
DOUBLE D浮動小数点数(D)
DOUBLE G浮動小数点数(G)
DOUBLE(Alpha固有) IEEE T浮動小数点数(FT)
QUADRUPLE(VAX固有) H浮動小数点数(H)
BOOLEAN (なし)
CHAR ASCIIテキスト(T)
VARYING OF CHAR 変形テキスト(VT)
SET (なし)
FILE (なし)
列挙 (なし)
部分範囲 (なし)
型付きポインタ (なし)
配列 (なし)
レコード (なし)
可変レコード (なし)

Pascalの言語式の中では,デバッガは,[1,2,5,8..10]や[RED,BLUE]といったPascal の集合定数を受け入れます。

REAL型の浮動小数点数は,コンパイラのスイッチまたはソース・コードの属性によって,F 浮動小数点数またはIEEE S浮動小数点数のどちらかで表現されます。

DOUBLE型の浮動小数点数は,コンパイラのスイッチまたはソース・コードの属性によって,D 浮動小数点数,G浮動小数点数,またはIEEE T浮動小数点数のどれかで表現されます。

C.13.6 補足情報

通常は,変数,レコード・フィールド,配列の構成要素のそれぞれに対して, 検査,評価,格納を行うことができますが,次の場合は例外です。プログラムの中で変数が参照されていない場合,Pascal コンパイラは変数を割り当てません。 変数を割り当てていないときにその変数を検査しようとしたり, その変数へ格納しようとするとエラー・メッセージが表示されます。

変数にデータを格納する場合,格納される値が変数よりも大きいときは, デバッガは上位ビットを切り捨てます。格納される値が変数よりも小さいときは, 上位ビットをゼロで埋めます。代入互換性の規則に違反した格納をすると情報メッセージが表示されます。

実行中のブロック内であればどのブロックでも自動変数を調べたり,自動変数へ格納することができます。 しかし,自動変数はスタック領域に割り当てられ, レジスタに格納されるので,変数が初期化されるまで,または変数に値が代入されるまで, 自動変数の値は未定義であるとみなされます。

C.13.7 制限事項

Pascalについてのデバッガの制限事項は次のとおりです。

VARYING OF CHARの文字列の値を調べることはできますが,Pascalの通常の構文を使用して.LENGTH フィールドや.BODYフィールドの値を調べることはできません。 たとえば,VARSが文字列変数名の場合,次のコマンドはサポートされません。

     DBG> EXAMINE VARS.LENGTH
     DBG> EXAMINE VARS.BODY

これらのフィールドを確認するには,次の方法を使用します。

使用する 使用しない
EXAMINE/WORD VARS EXAMINE VARS.LENGTH
EXAMINE/ASCII VARS+2 EXAMINE VARS.BODY

C.14 PL/I

次の各サブトピックでは,デバッガによるPL/Iのサポートについて説明します。

C.14.1 言語式の演算子

言語式でサポートされているPL/Iの演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 ** べき乗
挿入辞 || 連結
挿入辞 = 等値
挿入辞 ^= 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 ^< 以上
挿入辞 < 小なり
挿入辞 <= 以下
挿入辞 ^> 以下
接頭辞 ^ ビット単位のNOT
挿入辞 & ビット単位のAND
挿入辞 | ビット単位のOR

C.14.2 言語式とアドレス式の構造

サポートされている,PL/Iの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 添字指定
.(ピリオド) 構造体の構成要素の選択
-> ポインタの間接参照

C.14.3 データ型

サポートされているPL/Iのデータ型を次に示します。

PL/Iのデータ型 VMSのデータ型名
FIXED BINARY バイト整数(B),ワード整数 (W) ,またはロングワード整数(L)
FIXED DECIMAL パック10進数(P)
FLOAT BIN/DEC F浮動小数点数(F)
FLOAT BIN/DEC D浮動小数点数(D)
FLOAT BIN /DEC G浮動小数点数(G)
FLOAT BIN/DEC(VAX固有) H浮動小数点数(H)
BIT ビット(V)
BIT ビット境界合わせなし(VU)
CHARACTER ASCIIテキスト(T)
CHARACTER VARYING 変形テキスト(VT)
FILE (なし)
ラベル (なし)
ポインタ (なし)
配列 (なし)
構造体 (なし)

C.14.4 静的変数と非静的変数

次の記憶クラスの変数は静的に割り当てられます。


STATIC
EXTERNAL
GLOBALDEF
GLOBALREF

次の記憶クラスの変数は,スタック上またはレジスタ内に非静的に割り当てられます。


AUTOMATIC
BASED
CONTROLLED
DEFINED
PARAMETER

C.14.5 データの検査と操作

以下の各サブトピックでは,PL/Iのデータ型を使用したEXAMINEコマンドの例を示します。 デバッガのサポートでPL/I固有の事項についても説明しています。

C.14.5.1 EXAMINEコマンドの例

次に,EXAMINEコマンドでのいくつかのPL/Iのデータ型の使用例を示します。

C.14.5.2 デバッガのサポートについての注意事項

デバッガによるPL/Iのサポートについては次の点に注意してください。

入口変数やラベル変数で,または入口やラベルの形式でDEPOSITコマンドを使用することはできません。 また,配列全体や構造体全体といっしょにDEPOSIT コマンドを使用することもできません。入口変数やラベル変数で, または入口やラベルの形式でEXAMINEコマンドを使用することはできません。EXAMINE コマンドの代わりにEVALUATE/ADDRESSコマンドを使用してください。

GLOBALDEF VALUEリテラルなどのグローバル・リテラルの属性や値を確認するためにEXAMINE コマンドを使用することはできません。これはグローバル・ リテラルが静的な式であるためです。代わりにEVALUATEコマンドを使用してください。

コンパイル時の変数およびプロシージャといっしょに,EXAMINE, EVALUATE,DEPOSITの各コマンドを使用することはできません。しかし, その定数がデスティネーションではなくソースである場合は,コンパイル時の定数とともにEVALUATE コマンドやDEPOSITコマンドを使用することができます。EXAMINE コマンドは使用できません。

初期化されていない自動変数の内容は,値が代入されるまでは無効です。 代入する前に検査した場合,どのような値が表示されるかは予測できません。

他のポインタの値をポインタ変数に格納することで両方のポインタへのシンボル参照を行うか, または,仮想アドレスをポインタ変数に格納するかのどちらかの方法によって, ポインタ変数へ値を格納することができます。EVALUATE/ADDRESS コマンドを使用すると,変数の仮想アドレスを知ることができます。 それからそのアドレスをポインタに格納してください。 ポインタをチェックする場合,デバッガは,ポインタが指す変数の仮想アドレスの形式でポインタの値を表示します。

PL/Iの言語規則に準拠するために,PL/Iの言語式のnまたは n.nの形式の数値定数はすべて整数定数や浮動小数点定数ではなく, パック10進数の定数として処理されます。したがって,10の内部表現は0C01h であり,0Ahではありません。

nEnまたはn.nEnの構文を使用すると,浮動小数点定数を入力することができます。

内部表現がロングワード整数である定数を入力する構文は,PL/Iにはありません。 デバッガはPL/Iの型変換規則をサポートしているので,通常, デバッグ時にこの制約が重大なものになることはありませんが,整数定数を入力することはできます。 入力にはデバッガの%HEX,%OCT,%BINの各演算子を使用してください。 これが可能なのは,10進数以外の定数はFIXED BINARY とみなされるためです。たとえば,EVALUATE/HEXADECIMAL 53 + %HEX 0というコマンドは00000035を表示します。

C.15 RPG II (VAXのみ)

次の各節では,デバッガによるRPG IIのサポートについて説明します。

C.15.1 言語式の演算子

言語がRPG IIに設定されている場合,言語式では次の演算子がサポートされます。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 = 等値
挿入辞 NOT = 不等
挿入辞 > 大なり
挿入辞 NOT < 以上
挿入辞 < 小なり
挿入辞 NOT > 以下
接頭辞 NOT 論理否定
挿入辞 AND 論理積
挿入辞 OR 論理和

C.15.2 言語式とアドレス式の構造

サポートされている,RPG IIの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 添字指定

C.15.3 データ型

サポートされているRPG IIのデータ型を次に示します。

RPG IIのデータ型 VMSのデータ型名
ロングワード2進数 ロングワード整数(L)
ワード2進数 ワード整数(W)
パック10 進数 パック10進数(P)
文字 ASCIIテキスト(T)
オーバパンチされた10進数 右オーバパンチされた記号(NRO)
配列 (なし)
(なし)

C.15.4 ブレークポイントまたはトレースポイントの設定

RPG IIプログラムでは,ソースの行番号,論理サイクルのラベル,ユーザ定義のタグ名, サブルーチンのラベルなどを使用してブレークポイントを設定することができます。RPG II プログラムのデバッグは,他のプログラムのデバッグと多少異なります。 次の各サブトピックでは,ブレークポイントやトレースポイントを設定する場所とその方法について説明します。

C.15.4.1 仕様

仕様のどこにブレークポイントまたはトレースポイントを行番号で設定できるかを次に説明します。

RPG IIプログラムのサイクルは,プログラムの行が処理される順番を決定します。 ブレークポイントやトレースポイントを設定するときは,RPG II がユーザ・プログラムに割り当てる行番号を参照することができます。これらの行番号はリスト・ ファイルか,デバッガのソース表示で見ることができます。 仕様の欄1から5にユーザが指定する行番号は使用されません。

コンパイラは,特定の仕様にだけ,論理サイクル内の特定の箇所で行番号を付けます。 したがって,プログラム内のそれらの箇所にブレークポイントやトレースポイントを設定することができます。

C.15.4.2 ラベル

RPG IIのラベルをブレークポイントやトレースポイントとして設定することができます。 ユーザ定義のタグに加えて,次のRPG IIのラベルが用意されています。 これらのラベルは論理サイクル内の特定の箇所に対応します。 これらのラベルはソース・コードには表示されませんが,デバッガからはアクセス可能です。 これらのラベルは機械語コード・リストに記されています。

RPG IIのラベル 機能およびブレークポイントの動作
*DETL 行の詳細と見出しを出力する直前でブレークする。
*GETIN 1次ファイルまたは2次ファイルから次のレコードを読み込む直前でブレークする。
*TOTC 合計時の算出を実行する直前でブレークする。
*TOTL 合計時の出力を実行する直前でブレークする。
*OFL オーバフローの出力を実行する直前でブレークする。
*DETC 明細時の算出を実行する直前でブレークする。

次に例を示します。

     DBG> SET BREAK *TOTL

C.15.5 EXAMINEコマンド

EXAMINEコマンドを使用すると,変数の内容,現在のテーブル項目,配列要素, または入出力バッファを確認することができます。

C.15.6 DEPOSITコマンド

DEPOSITコマンドを使用するときは,次の点に注意してください。

C.15.7 EDITコマンド

EDITコマンドを使用すると,DECランゲージ・センシティブ・エディタではなく,RPG II のエディタが起動します。

C.16 SCAN (VAXのみ)

次の各サブトピックでは,デバッガによるSCANのサポートについて説明します。

C.16.1 言語式の演算子

言語式でサポートされているSCANの演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 & 連結
挿入辞 = 等値
挿入辞 <> 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 < 小なり
挿入辞 <= 以下
接頭辞 NOT 補数
挿入辞 AND 論理積
挿入辞 OR 集合和
挿入辞 XOR 排他的論理和

C.16.2 言語式とアドレス式の構造

サポートされている,SCANの言語式とアドレス式の構造を次に示します。

シンボル 構造
( ) 添字指定
.(ピリオド) レコードの構成要素の選択
-> ポインタの間接参照

C.16.3 定義済みのシンボル

サポートされている,SCANの定義済みのシンボルを次に示します。

シンボル 意味
TRUE 論理値TRUE
FALSE 論理値FALSE
NIL NILポインタ

C.16.4 データ型

サポートされているSCANのデータ型を次に示します。

SCANのデータ型 VMSのデータ型名
BOOLEAN (なし)
INTEGER ロングワード整数(L)
POINTER (なし)
FIXED STRING(n) CLASS=Sのテキスト
VARYING STRING(n) CLASS=VSのテキスト
DYNAMIC STRING CLASS=Dのテキスト
TREE (なし)
TREEPTR (なし)
RECORD (なし)
OVERLAY (なし)

次のデータ型はサポートしていません。


FILE
TOKEN
GROUP
SET

C.16.5 名前

デバッガ・コマンドでは,次のSCANの構造名を使用することができます。


プロシージャ
マクロ
定数
変数
ラベル

C.16.6 実行の制御

SCANのブレークポイント,トレースポイント,ウォッチポイントについては, 次の点に注意してください。

C.16.6.1 ブレークポイントとトレースポイント

行番号の他に,プロシージャ,トリガ・マクロ,構文マクロ,ラベルにもブレークポイントやトレースポイントを設定することができます。 次に例を示します。

     DBG> SET BREAK find_keyword    !トリガ・マクロでブレークする。
     DBG> CANCEL BREAK exit         !ラベルのブレークを取り消す。
     DBG> SET BREAK compare_trees   !プロシージャでブレークする。

SCANの画像マッチングをモニタする場合,通常のブレークポイントやトレースポイントはそれほど便利ではありません。 プログラムが作成するトークンをモニタするにはどこにブレークポイントやトレースポイントを設定したらいいのでしょう。 プログラムにはそのようなブレークポイントを設定すべき文がありません。

この問題を解決するために,VAX SCANはいくつかのイベントを定義します。 これらのイベントにブレークポイントやトレースポイントを設定すると, 画像マッチングのプロセスをモニタすることができます。

SCANプログラムでは,次のイベント・キーワードが定義されます。

イベント・キーワード 機能
TOKEN トークンを作成する。
PICTURE 画像のオペランドを照合中である。
INPUT 入力ストリームの改行を読み込む。
OUTPUT 出力ストリームの改行を書き込む。
TRIGGER トリガ・マクロを開始または終了する。
SYNTAX 構文マクロを開始または終了する。
ERROR 画像マッチングのエラー回復を開始または終了する。

これらのキーワードは,次のコマンドで/EVENT修飾子といっしょに使用してください。


(SET,CANCEL,ACTIVATE,DEACTIVATE) BREAK
(SET,CANCEL,ACTIVATE,DEACTIVATE) TRACE

たとえば,次のコマンドで設定したブレークポイントは,TOKENを作成すると必ず検出されます。

     DBG> SET BREAK/EVENT=TOKEN

メイン・プログラムがSCANで記述されている場合,デバッガは自動的にSCAN のイベントを認識できるようにします。別の言語で記述されたプログラムをデバッグしていて, そのプログラムがSCANルーチンを呼び出す場合は, 次の手順に従ってSCANの環境を設定してください。

  1. 言語固有の演算子,式,およびその他の構造を認識可能にするために,SET LANGUAGE SCAN コマンドを入力する(SET LANGUAGEコマンドの説明を参照。)

  2. SCANのイベントを認識可能にするために,SET EVENT_FACILITY SCANコマンドを入力する(SET EVENT_FACILITYコマンドの説明を参照) 。SHOW EVENT_FACILITYコマンドを使用すると,現在のファシリティとそのイベントを表示できます。

C.16.6.2 ウォッチポイント

SCANのウォッチポイントについては,次の点に注意してください。

C.16.7 検査と格納

次の各サブトピックでは,次のSCAN変数の検査方法と,これらの変数への格納の方法について説明します。


STRING
FILL
POINTER
TREE
TREEPTR
RECORD
OVERLAY

C.16.7.1 STRING変数

FIXED STRING変数に格納する場合,その変数の宣言で設定したサイズよりも長い文字列を格納すると, 切り捨てが行われます。

VARYING STRING変数に格納する場合,その変数の宣言で設定した最大長よりも長いサイズの文字列を格納すると, 切り捨てが行われます。

DYNAMIC STRING変数に格納する場合,その変数の現在のサイズよりも長い文字列を格納すると, 切り捨てが行われます。

FIXED STRING変数およびDYNAMIC STRING変数では,変数の現在のサイズよりも短い文字列を格納すると, その文字列は左寄せされ,埋められなかった部分の右側はブランク文字で埋められます。

VARYING STRING変数の場合,変数を格納している現在の領域は,格納される変数に合わせてサイズが調節されます。

C.16.7.2 FILL変数

省略時設定でFILL変数の値を調べると,指定した変数の内容が文字列として表示されるので, それを見てもほとんど意味がないことがあります。フィルの特性または型が分かっているときは, 適切な修飾子をコマンドに使用することによって, 意味のある表示を行わせることができます。次の例は, フィルxが単精度浮動小数点数であると分かっているときのコマンドです。

     DBG> EXAMINE/FLOAT x

C.16.7.3 POINTER変数

POINTERが指している変数のアドレスを検索するために,POINTERを名前でチェックすることができます。POINTER に基づく変数を検査するには,負符号と右不等号を組み合わせた演算子(->) を使用してください。

次の宣言と代入が行われた場合について考えます。

     TYPE symnode: RECORD
                      ptr:  POINTER TO symnode,
                      vstr: VARYING STRING( 20 ),
                   END RECORD;

     DECLARE x   : symnode;
     DECLARE xptr: POINTER TO symnode;
     xptr        = POINTER(x);
     x.vstr      = 'prehensile';

次のコマンドは,xの構成要素であるvstrの値を表示します。

     DBG> EXAMINE x.vstr
     POINTER\MAINPOINTER\X.VSTR: 'prehensile'

次のコマンドは,POINTERに基づいてvstrの値を表示します。

     DBG> EXAMINE xptr->.vstr
     POINTER\MAINPOINTER\XPTR->.VSTR: 'prehensile '

C.16.7.4 TREE変数とTREEPTR変数

次の構文を使用すると,木構造のノードの内容を調べることができます。

     EXAMINE tree_variable([subscript], . . . )

TREE変数へ格納することはできません。

EXAMINEコマンドで木構造の名前を指定すると,その木構造のノードと葉の内容がすべて表示されます。 次に例を示します。

     DBG> EXAMINE voters

下位ノードの指定は,そのノードの添字を入力すればできます。次に例を示します。

     DBG> EXAMINE voters('salem')

確認したい葉につながる添字をすべて指定すると,木構造の葉ノードを調べることができます。 次に例を示します。

     DBG> EXAMINE voters('salem',ward2)

cityptrまたはwardptrなどのTREEPTR変数を調べると, その木ノードのアドレスが表示されます。TREEPTR変数が何を指しているかを次のようにして確認します。

     DBG> EXAMINE cityptr->

C.16.7.5 RECORD変数とOVERLAY変数

EXAMINEコマンドを使用するときにRECORDを名前で指定すると,RECORDのすべての構成要素が表示されます。RECORD の構成要素を個々に調べるには, 各構成要素をフル・ネームで指定します。

一般的な書式は次のとおりです。

     EXAMINE recordname
     EXAMINE recordname.componentname.componentname . . . 

OVERLAYの確認方法もこれと同様です。OVERLAYの場合も構成要素がすべて表示されます。 このように,FILL(4),INTEGER,VARYING STRING(2)がそれぞれ4 バイトの領域であれば,4つのバイトは3種類の異なった形式で表示されます。

C.17 UNKNOWN言語

次の各サブトピックでは,UNKNOWNである言語の,デバッガのサポートについて説明します。

C.17.1 言語式の演算子

UNKNOWNの言語について,言語式でサポートされている演算子を次に示します。

種類 シンボル 機能
接頭辞 + 単項正符号
接頭辞 - 単項負符号(否定)
挿入辞 + 加算
挿入辞 - 減算
挿入辞 * 乗算
挿入辞 / 除算
挿入辞 ** べき乗(VAX固有)
挿入辞 & 連結
挿入辞 // 連結
挿入辞 = 等値
挿入辞 <> 不等
挿入辞 /= 不等
挿入辞 > 大なり
挿入辞 >= 以上
挿入辞 < 小なり
挿入辞 <= 以下
挿入辞 EQL 等値
挿入辞 NEQ 不等
挿入辞 GTR 大なり
挿入辞 GEQ 以上
挿入辞 LSS 小なり
挿入辞 LEQ 以下
接頭辞 NOT 論理否定
挿入辞 AND 論理積
挿入辞 OR 論理和
挿入辞 XOR 排他的論理和
挿入辞 EQV 同値

C.17.2 言語式とアドレス式の構造

UNKNOWNの言語について,サポートされている言語式とアドレス式の構造を次に示します。

シンボル 構造
[ ] 添字指定
( ) 添字指定
.(ピリオド) レコードの構成要素の選択
^(サーカンフレックス) ポインタの間接参照

C.17.3 定義済みのシンボル

UNKNOWNの言語について,サポートされている定義済みのシンボルを次に示します。

シンボル 意味
TRUE 論理値TRUE
FALSE 論理値FALSE
NIL NILポインタ

C.17.4 データ型

言語がUNKNOWNに設定されている場合,デバッガは,他の言語で受け入れられるデータ型をすべて認識しますが, ピクチャ型やファイル型など,限られたいくつかの言語固有のデータ型は認識しません。UNKNOWN の言語式では,OpenVMS 呼び出し標準規則のスカラ・データ型のほとんどを使用することができます。


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