Compaq OpenVMS
デバッガ説明書


前へ 次へ 目次 索引


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 コマンドを使用します。


前へ 次へ 目次 索引