日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V7.3-2
ライブラリ

タイトルページ
目次
まえがき
第 1 部:デバッガ概要
第 1 章:デバッガ概要
第 2 部:コマンド・インタフェース
第 2 章:デバッガの起動
第 3 章:プログラム実行の制御とモニタ
第 4 章:プログラム・データの検査と操作
第 5 章:プログラム内シンボルへのアクセス制御
第 6 章:ソース・コードの表示の制御
第 7 章:画面モード
第 3 部:DECwindows インタフェース
第 8 章:DECwindows Motifインタフェースの概要
第 9 章:デバッグ・セッションの開始と終了
第 10 章:デバッガの使用方法
第 4 部:PC クライアント・インタフェース
第 11 章:デバッガの PC クライアント/サーバ・インタフェースの概要
第 5 部:高度なトピック
第 12 章:ヒープ・アナライザの使用
第 13 章:その他の便利な機能
第 14 章:特殊なデバッグ
第 15 章:マルチプロセス・プログラムのデバッグ
第 16 章:ベクタ化されたプログラムのデバッグ
第 17 章:タスキング・プログラムのデバッグ
第 6 部:付録
付録 A :定義済みのキー機能
付録 B :組み込みシンボルと論理名
付録 C :各言語に対するデバッガ・サポートの要約
付録 D :EIGHTQUEENS.C
索引
PDF
OpenVMS ホーム

HP OpenVMS
デバッガ説明書


目次 索引



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


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++ では,インスタンス化されたテンプレート名の中の式を, stack<double,f*10> のような完全な定数式とすることができます。この形式は,デバッガではまだサポートされていません。このため,式の値を入力することが必要です ( たとえば,stack の例で f が 10 であれば,100 を入力しなければなりません )。

例 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 レキシカル関数

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 浮動小数点数のどれかで表されます。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項