|
≫ |
|
|
|
HP OpenVMS デバッガ説明書
C.6.4 大文字小文字の区別 | |
C 言語では,シンボル名の大文字と小文字は区別され,それぞれ別個の文字として処理されます。
C.6.5 静的変数と非静的変数 | |
static,globaldef,globalref,extern の各記憶クラスの変数は,静的に割り当てられます。
記憶クラスが auto または register の変数は,非静的に (スタックまたはレジスタに) 割り当てられます。このような非静的変数は,それらを定義しているルーチンが呼び出しスタック上でアクティブになっているときだけアクセス可能です。
C.6.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.6.7 配列 | |
デバッガは,C の配列を他のほとんどの言語と同様に処理します。したがって,配列の構文を使用して (たとえば,EXAMINE arr[3] で),配列の集合体全体,配列断面,または配列の個々の要素をそれぞれチェックすることができます。また,配列への格納は一度に 1 要素ずつです。
C.6.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.6.9 構造体と共用体 | |
構造体をチェックするときは,その全体を検査したり,メンバ単位で検査することができます。また,構造体へのデータの格納は一度に 1 メンバずつ行うことができます。
構造体のメンバまたは共用体のメンバを参照するには,C で参照するときの通常の構文を使用します。つまり,変数
pが構造体へのポインタの場合,その構造体のメンバ
yは,
p ->yという式で参照することができます。変数
xが,構造体に割り当てられた記憶域のベースを参照している場合,その構造体のメンバは
x.yという式で参照することができます。
デバッガは,構造体や共用体のメンバを参照するのに,C の型検査規則を使用します。たとえば
x.yの場合,
yが
xのメンバである必要はありません。
yは,型とあわせてオフセットとして処理されます。このような参照があいまいになる場合 ( メンバ
yを持つ構造体が複数ある場合 ),デバッガは次の規則に従って参照を解決しようとします。なお,構造体や共用体のメンバ参照のあいまいさを解消するときは,
x.yと
p ->yの両方とも同じ規則が適用されます。
- メンバの中で
yだけが構造体
xまたは共用体
xに属している場合,
yが参照される。
- メンバの中で
yだけが
xと同じ有効範囲にある場合は,
yが参照される。
使用される有効範囲を絞るため,また,あいまいさを解消するために,
xを参照するときは,いつでもパス名を与えることができます。パス名は,
xと
yの両方を検索するのに使用されます。
Alpha システムおよび Integrity システムでは,OpenVMS デバッガはバージョン 5.5 以降 (Alpha および Integrity のみ) のコンパイラでコンパイルされた C++ モジュールデバッグする機能がサポートされています。
デバッガは,C++ の次の機能をサポートします。
- C++の名前と式。次のものを含む。
- クラス・メンバを参照するための明示的な,および暗黙の
thisポインタ
- スコープ解決演算子 (::)
- メンバ・アクセス演算子であるピリオド(.)と右矢印(->)
- テンプレートのインスタンス化
- テンプレート名
- 次に示す中でのブレークポイントの設定。
- 静的な仮想関数を含む,メンバ関数
- オーバーロードされた関数
- コンストラクタとデストラクタ
- テンプレートのインスタンス化
- 演算子
- 関数の呼び出し。オーバーロードされた関数を含む。
- C++のコードと,他の言語のコードが混在したプログラムのデバッグ。
この節のデバッグの例は, 例 C-1 に含まれるテスト・プログラムを参照しており,また, 例 C-2 に含まれるデバッグ・セッションの一部を取り出したものになっています。次節以降で,C++ のデバッガ・サポートについて説明します。
C.7.1 言語式における演算子 | |
言語式でサポートされる C++ 演算子を次に示します。
接頭辞
|
*
|
間接参照
|
接頭辞
|
&
|
アドレス
|
接頭辞
|
sizeof
|
オブジェクトのサイズ
|
接頭辞
|
-
|
単項マイナス(否定)
|
挿入辞
|
+
|
加算
|
挿入辞
|
-
|
減算
|
挿入辞
|
*
|
乗算
|
挿入辞
|
/
|
除算
|
挿入辞
|
%
|
剰余
|
挿入辞
|
<<
|
左シフト
|
挿入辞
|
>>
|
右シフト
|
挿入辞
|
==
|
等しい
|
挿入辞
|
!=
|
等しくない
|
挿入辞
|
>
|
より大きい
|
挿入辞
|
>=
|
以上
|
挿入辞
|
<
|
より小さい
|
挿入辞
|
<=
|
以下
|
接頭辞
|
~ (チルド)
|
ビットごとのNOT
|
挿入辞
|
&
|
ビットごとのAND
|
挿入辞
|
|
|
ビットごとのOR
|
挿入辞
|
^
|
ビットごとの排他的OR
|
接頭辞
|
!
|
論理NOT
|
挿入辞
|
&&
|
論理AND
|
挿入辞
|
||
|
論理OR
|
感嘆符 (!) は演算子なので,C++ プログラムでコメント区切り文字として使用できません。ただし,デバッガのログ・ファイルをデバッガの入力として使用できるように,行内のスペースでない最初の文字が ! である場合は,デバッガは ! をコメント区切り文字として解釈します。デバッガは C++ 言語モードでは,/* または // をコメントの先頭として解釈し,その行の最後までをコメントとみなします。
デバッガは,C++ 言語式とデバッガ・アドレス式の両方で,アスタリスク (*) 接頭辞を間接参照演算子として扱います。デバッガが C++ 言語モードの場合,アドレス式では,
*接頭辞はピリオド (.) 接頭辞またはサイン (@) 接頭辞と同じです。
デバッグの対象のプログラムが意図に反して修正されることがないように,デバッガは C++,および他の言語の代入演算子をサポートしません。このため,=,+=,--=,++, -- はデバッガコマンドによって解釈されません。メモリの内容を変更するには,デバッガの DEPOSIT コマンドを使用します。
C.7.2 言語式とアドレス式における構造体 | |
C++の言語式とアドレス式でサポートされる構造体を次に示します。
[ ]
|
添字付け
|
. (ピリオド)
|
構造体の構成要素の選択
|
->
|
ポインタ間接参照
|
::
|
スコープ解決
|
C.7.3 データ型 | |
サポートされるC++のデータ型を次に示します。
__int64 (Alpha および Integrity)
|
クォドワード整数 (Q)
|
unsigned __int64 (Alpha および Integrity)
|
クォドワード符号なし整数 (QU)
|
__int32 (Alpha および Integrity)
|
ロングワード整数 (L)
|
unsigned __int32 (Alpha および Integrity)
|
ロングワード符号なし整数 (LU)
|
int
|
ロングワード整数 (L)
|
unsigned int
|
ロングワード符号なし整数 (LU)
|
__int16 (Alpha および Integrity)
|
ワード整数 (W)
|
unsigned __int16 (Alpha および Integrity)
|
ワード符号なし整数 (WU)
|
short int
|
ワード整数 (W)
|
unsigned short int
|
ワード符号なし整数 (WU)
|
char
|
バイト整数 (B)
|
unsigned char
|
バイト符号なし整数 (BU)
|
float
|
F浮動小数点数 (F)
|
__f_float (Alpha および Integrity)
|
F浮動小数点数 (F)
|
double
|
D浮動小数点数 (D)
|
double
|
G浮動小数点数 (G)
|
__g_float (Alpha および Integrity)
|
G浮動小数点数 (G)
|
float (Alpha および Integrity)
|
IEEE S浮動小数点数 (FS)
|
__s_float (Alpha および Integrity)
|
IEEE S浮動小数点数 (FS)
|
double (Alpha および Integrity)
|
IEEE T浮動小数点数 (FT)
|
__t_float (Alpha および Integrity)
|
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.7.4 大文字小文字の区別 | |
C++では,シンボル名の大文字小文字が区別されます。つまり,大文字と小文字は異なる文字として扱われます。
C.7.5 クラスに関する情報の表示 | |
クラス宣言に関する静的な情報を表示するには,SHOW SYMBOLコマンドを使用します。クラス・オブジェクトに関する動的な情報を表示するには, EXAMINE コマンドを使用します ( 付録 C.7.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
|
|