Share via


オブジェクト ダンプのカスタマイズ

このトピックの内容は、次の製品に該当します。

エディション

Visual Basic

C#

F#

C++

Web Developer

Express

トピック該当なし トピック該当なし トピック該当なし

ネイティブのみ

トピック該当なし

Pro、Premium、Ultimate

トピック該当なし トピック該当なし トピック該当なし

ネイティブのみ

トピック該当なし

CObject から派生クラスを作成するときに Dump メンバー関数をオーバーライドすると、DumpAllObjectsSince を使用して出力ウィンドウにオブジェクトをダンプするときに、追加情報を提供できます。

Dump 関数は、オブジェクトのメンバー変数の内容をテキスト形式でダンプ コンテキスト (CDumpContext) に書き込みます。 ダンプ コンテキストは、入出力ストリームに類似しています。 CDumpContext にデータを送るには、ストリーム演算子 (<<) を使用します。

Dump 関数をオーバーライドするときは、まず基本クラスの Dump を呼び出して、基本クラスのオブジェクトの内容をダンプします。 その後、派生クラスの各メンバー変数について、テキスト形式の説明と値を出力します。

Dump 関数の宣言例を次に示します。

class CPerson : public CObject
{
public:
#ifdef _DEBUG
    virtual void Dump( CDumpContext& dc ) const;
#endif

    CString m_firstName;
    CString m_lastName;
    // And so on...
};

オブジェクトのダンプは、プログラムをデバッグする場合にだけ必要です。したがって、Dump 関数の宣言は #ifdef _DEBUG と #endif で囲みます。

次の例の Dump 関数は、まず基本クラスの Dump 関数を呼び出します。 その後、各メンバー変数の簡単な説明を各メンバーの値と一緒に診断ストリームに書き込みます。

#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
    // Call the base class function first.
    CObject::Dump( dc );

    // Now do the stuff for our specific class.
    dc << "last name: " << m_lastName << "\n"
        << "first name: " << m_firstName << "\n";
}
#endif

ダンプの出力先を指定するために、CDumpContext に引数を渡す必要があります。 MFC のデバッグ バージョンでは、afxDump という定義済みの CDumpContext オブジェクトを渡して、出力をデバッガーに送ります。

CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif

参照

概念

オブジェクト ダンプ

その他の技術情報

TRACE マクロ