| 日本-日本語 |
|
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
| 目次 | 索引 |
C.7.6 オブジェクトに関する情報の表示 |
デバッガはオブジェクトに関する情報を表示するために, C++のシンボル検索規則を使用します。現在のオブジェクトの値を表示するには,EXAMINEコマンドを使用します。例を示します。
DBG> EXAMINE a
CXXDOCEXAMPLE\main\a: struct A
i: 0
j: 1
__vptr: 131168
DBG>
|
また,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.7.5 項 を参照)。
オブジェクトのウォッチポイントを設定することができます。静的でないすべてのデータ・メンバはウォッチされます (基底クラス中のデータ・メンバを含みます)。オブジェクト上にウォッチポイントを設定すると,静的なデータ・メンバはウォッチされません。ただし,静的なデータ・メンバについて,明示的にウォッチポイントを設定することは可能です。例を示します。
C.7.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++シンボル検索ルールを使用します。例を示します。
C.7.8 デバッグ関数
![]()
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> show symbol/full g
overloaded name C::g
routine C::g(char)
type signature: void g(char)
address: 132224, size: 128 bytes
routine C::g(long)
type signature: void g(long)
address: 132480, size: 96 bytes
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 ~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::operator==, type
signature: bool operator==M-)
code address: 198716, size:
40 bytes, procedure descriptor
address: 65752
DBG> SET BREAK operator==
DBG> SHOW SYMBOL /FULL ==
routine C::==
type signature: int ==(C &)
address: unallocated
DBG> SHOW BREAK
breakpoint at routine C::~C
DBG>
DBG> examine C::~C
C::~C: alloc r35 = ar.pfs, 3F, 01, 00
DBG>
DBG> ex/source ~C
module CXXDOCEXAMPLE
37: ~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
|
言語式でサポートされている COBOL の演算子を次に示します。
![]()
C.8 COBOL
![]()
C.8.1 言語式の演算子
![]()
| 種類 | シンボル | 機能 |
|---|---|---|
| 接頭辞 | + | 単項正符号 |
| 接頭辞 | - | 単項負符号(否定) |
| 挿入辞 | + | 加算 |
| 挿入辞 | - | 減算 |
| 挿入辞 | * | 乗算 |
| 挿入辞 | / | 除算 |
| 挿入辞 | = | 等値 |
| 挿入辞 | NOT = | 不等 |
| 挿入辞 | > | 大なり |
| 挿入辞 | NOT < | 以上 |
| 挿入辞 | < | 小なり |
| 挿入辞 | NOT > | 以下 |
| 挿入辞 | NOT | 論理否定 |
| 挿入辞 | AND | 論理積 |
| 挿入辞 | OR | 論理和 |
サポートされている COBOL の言語式とアドレス式の構造を次に示します。
C.8.2 言語式とアドレス式の構造
![]()
| シンボル | 構造 |
|---|---|
| ( ) | 添字指定 |
| OF | レコードの構成要素の選択 |
| IN | レコードの構成要素の選択 |
サポートされている COBOL のデータ型を次に示します。
C.8.3 データ型
![]()
| COBOL のデータ型 | VMS のデータ型名 |
|---|---|
| COMP | ロングワード整数 (L,LU) |
| COMP | ワード整数 (W,WU) |
| COMP | クォドワード整数 (Q,QU) |
| COMP-1 | F 浮動小数点数(F) |
| COMP-1 (Alpha および Integrity 固有) | IEEE S 浮動小数点数(FS) |
| COMP-2 | D 浮動小数点数(D) |
| COMP-2 (Alpha および Integrity 固有) | 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 浮動小数点数のどちらかで表現されます。
| 目次 | 索引 |
|
||||||||