Next: , Previous: C Constants, Up: C


9.4.1.3 C++式

GDBが持っている、 式を処理する機能は、 C++のほとんどの式を解釈することができます。

注意: GDBは、 適切なコンパイラが使用されている場合のみ、 C++のコードをデバッグすることができます。 典型的な例を挙げると、 C++のデバッグでは、 シンボル・テーブルの中の追加的なデバッグ情報に依存するため、 特別なサポートが必要になるということがあります。 使用されるコンパイラが、 a.out、 MIPS ecoff、 RS/6000 xcoffelfを、 シンボル・テーブルに対するstabs拡張付きで生成することができるのであれば、 以下に列挙する機能を使用することができます (gnu CCの場合は、 ‘-gstabs’オプションを使用して明示的にstabsデバッグ拡張を要求することができます)。 一方、 オブジェクト・コードのフォーマットが、 標準coffelfdwarfである場合には、 GDBの提供するほとんどのC++サポートは機能しません

  1. メンバ関数の呼び出しが許されます。 以下のような式を使用することができます。
              count = aml->GetOriginal(x, y)
    

  2. メンバ関数が (選択されたスタック・フレームの中で) アクティブな場合、 入力された式は、 そのメンバ関数と同一の名前空間を利用することができます。 すなわち、 GDBは、 C++と同様の規則にしたがって、 クラス・インスタンスへのポインタthisへの暗黙の参照を許します。

  3. オーバーロードされた関数を呼び出すことができます。 GDBは、 正しい定義の関数呼び出しを決定します。 ただし、 制限が一点あります。 実際に呼び出したい関数が要求する型の引数を使用しなければなりません。 GDBは、 コンストラクタやユーザ定義の型演算子を必要とするような変換を実行しません。

  4. GDBは、 C++の参照変数として宣言された変数を理解します。 C++のソース・コードで参照変数を使用するのと同一の方法で、 参照変数を式の中で使用することができます。 参照変数は自動的に間接参照されます。

    GDBがフレームを表示する際に表示されるパラメータ一覧の中では、 参照変数の値は (他の変数とは異なり) 表示されません。 これにより、 表示が雑然となることを回避できます。 というのは、 参照変数は大きい構造体に対して使用されることが多いからです。 参照変数の アドレスは、 ‘set print address off’を指定しない限り、 常に表示されます。

  5. GDBはC++の名前解決演算子::をサポートしています。 プログラム中と同様に、 式の中でこれを使用することができます。 あるスコープが別のスコープの中で定義されることがありえるため、 必要であれば::を繰り返し使用することができます。 例えば、 ‘scope1::scope2::name’という具合です。 GDBはまた、 CおよびC++のデバッグにおいて、 ソース・ファイルを指定することで名前のスコープを解決することを許します (see Program variables)。