オブジェクト ダンプのカスタマイズ
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
ネイティブのみ |
|||
Standard |
ネイティブのみ |
|||
Pro/Team |
ネイティブのみ |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
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