オブジェクト ダンプのカスタマイズ
このトピックの内容は、次の製品に該当します。
エディション |
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