日本-日本語

製品  >  ソフトウェア  >  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
デバッガ説明書


目次 索引



デバッガは,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の両方とも同じ規則が適用されます。

  • メンバの中で yだけが構造体 xまたは共用体 xに属している場合, yが参照される。

  • メンバの中で yだけが xと同じ有効範囲にある場合は, yが参照される。

使用される有効範囲を絞るため,また,あいまいさを解消するために, xを参照するときは,いつでもパス名を与えることができます。パス名は, xyの両方を検索するのに使用されます。

C.6 C++ バージョン 5.5 および 5.5 以降 (Alphaのみ)

Alpha システムでは,OpenVMS デバッガはバージョン 5.5 以降 (Alpha のみ) のコンパイラでコンパイルされた C++ モジュールデバッグする機能がサポートされています。

デバッガは,C++ の次の機能をサポートします。

  • C++の名前と式。次のものを含む。

    • クラス・メンバを参照するための明示的な,および暗黙のthisポインタ

    • スコープ解決演算子 (::)

    • メンバ・アクセス演算子であるピリオド(.)と右矢印(->)

    • テンプレートのインスタンス化

  • 次に示す中でのブレークポイントの設定。

    • 静的な仮想関数を含む,メンバ関数

    • オーバロードされた関数

    • コンストラクタとデストラクタ

    • テンプレートのインスタンス化

    • 演算子

  • 関数の呼び出し。オーバロードされた関数を含む。

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

C.6.2 言語式とアドレス式における構造体

C++の言語式とアドレス式でサポートされる構造体を次に示します。

シンボル 構造体
[ ] 添字付け
. (ピリオド) 構造体の構成要素の選択
-> ポインタ間接参照
:: スコープ解決



C.6.3 データ型

サポートされる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.6.6 オブジェクトに関する情報の表示

デバッガはオブジェクトに関する情報を表示するために, 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 項 を参照)。


目次 索引

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