前へ | 次へ | 目次 | 索引 |
C++の言語式とアドレス式でサポートされる構造体を次に示します。
シンボル | 構造体 |
---|---|
[ ] | 添字付け |
.(ピリオド) | 構造体の構成要素の選択 |
-> | ポインタ間接参照 |
:: | スコープ解決 |
サポートされる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++のシンボル検索規則を使用します。現在のオブジェクトの値を表示するには,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++シンボル検索ルールを使用します。例を示します。
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++プログラムをデバッグする場合は,次の制限事項が適用されます。
例 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 |
前へ | 次へ | 目次 | 索引 |