CDumpContext クラス

人が読み取ることができる形式でテキストを出力するために、ストリームに依存した診断出力をサポートします。

構文

class CDumpContext

メンバー

パブリック コンストラクター

名前 説明
CDumpContext::CDumpContext CDumpContext オブジェクトを構築します。

パブリック メソッド

名前 説明
CDumpContext::D umpAsHex 指定された項目を 16 進数形式でダンプします。
CDumpContext::Flush ダンプ コンテキスト バッファー内のすべてのデータをフラッシュします。
CDumpContext::GetDepth ダンプの深さに対応する整数を取得します。
CDumpContext::HexDump 配列に含まれるバイトを 16 進数形式でダンプします。
CDumpContext::SetDepth ダンプの深さを設定します。

パブリック演算子

名前 説明
CDumpContext::operator << ダンプ コンテキストに変数とオブジェクトを挿入します。

解説

CDumpContext には基底クラスはありません。

afxDump(事前に宣言されたCDumpContext オブジェクト) を使用して、ほとんどのダンプを実行できます。 afxDump オブジェクトは、Microsoft Foundation クラス ライブラリのデバッグ バージョンでのみ使用できます。

いくつかのメモリ 診断サービス 出力に afxDump を使用します。

Windows 環境では、cerr ストリームと概念的に似た定義済みのafxDump オブジェクトからの出力が、Windows 関数OutputDebugStringを介してデバッガーにルーティングされます。

CDumpContext クラスには、オブジェクトのデータをダンプするCObject ポインターのオーバーロードされた挿入 (<<) 演算子があります。 派生オブジェクトのカスタム ダンプ形式が必要な場合は、 CObject::D ump をオーバーライドします。 ほとんどの Microsoft Foundation クラスは、オーバーライドされた Dump メンバー関数を実装します。

CStringCTimeCTimeSpanなど、CObjectから派生しないクラスには、CFileStatusCPointCRectなどのよく使用される構造体と同様に、独自のオーバーロードされたCDumpContext挿入演算子があります。

クラスの実装で IMPLEMENT_DYNAMIC または IMPLEMENT_SERIAL マクロを使用する場合、 CObject::DumpCObject派生クラスの名前を出力します。 それ以外の場合は、 CObject出力されます。

CDumpContext クラスは、ライブラリの Debug バージョンと Release バージョンの両方で使用できますが、Dump メンバー関数はデバッグ バージョンでのみ定義されます。 #ifdef _DEBUG / #endifステートメントを使用して、カスタム Dump メンバー関数を含む診断コードを角かっこで囲みます。

独自の CDumpContext オブジェクトを作成する前に、ダンプ先として機能する CFile オブジェクトを作成する必要があります。

CDumpContextの詳細については、「 MFC アプリケーションのデブギング」を参照してください。

#define _DEBUG

継承階層

CDumpContext

要件

ヘッダー: afx.h

CDumpContext::CDumpContext

クラス CDumpContextのオブジェクトを構築します。

CDumpContext(CFile* pFile = NULL);

パラメーター

pFile
ダンプ先である CFile オブジェクトへのポインター。

解説

afxDump オブジェクトは自動的に構築されます。

ダンプ コンテキストがアクティブな間は、基になる CFile に書き込まないでください。それ以外の場合は、ダンプに干渉します。 Windows 環境では、出力は Windows 関数 OutputDebugString経由でデバッガーにルーティングされます。

CFile f;
if (!f.Open(_T("dump.txt"), CFile::modeCreate | CFile::modeWrite))
{
   AFXDUMP(_T("Unable to open file\n"));
   exit(1);
}
CDumpContext dc(&f);

CDumpContext::D umpAsHex

指定した型を 16 進数として書式設定してダンプします。

CDumpContext& DumpAsHex(BYTE b);
CDumpContext& DumpAsHex(DWORD dw);
CDumpContext& DumpAsHex(int n);
CDumpContext& DumpAsHex(LONG l);
CDumpContext& DumpAsHex(LONGLONG n);
CDumpContext& DumpAsHex(UINT u);
CDumpContext& DumpAsHex(ULONGLONG n);
CDumpContext& DumpAsHex(WORD w);

戻り値

CDumpContext オブジェクトへの参照です。

解説

指定した型の項目を 16 進数としてダンプするには、このメンバー関数を呼び出します。 配列をダンプするには、 CDumpContext::HexDump を呼び出します。

#if _DEBUG
afxDump.DumpAsHex(115);
#endif

CDumpContext::Flush

バッファーに残っているデータを、ダンプ コンテキストにアタッチされたファイルに強制的に書き込みます。

void Flush();

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

ディープ ダンプまたは浅ダンプが処理中かどうかを判断します。

int GetDepth() const;

戻り値

SetDepthによって設定されるダンプの深さ。

SetDepth の例を参照してください。

CDumpContext::HexDump

16 進数として書式設定されたバイトの配列をダンプします。

void HexDump(
    LPCTSTR lpszLine,
    BYTE* pby,
    int nBytes,
    int nWidth);

パラメーター

lpszLine
新しい行の先頭に出力する文字列。

pby
ダンプするバイトを含むバッファーへのポインター。

nBytes
ダンプするバイト数。

nWidth
1 行あたりにダンプされた最大バイト数 (出力行の幅ではありません)。

解説

1 つの特定の項目の種類を 16 進数としてダンプするには、 CDumpContext::D umpAsHex を呼び出します。

#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif

CDumpContext::operator <<

指定したデータをダンプ コンテキストに出力します。

CDumpContext& operator<<(const CObject* pOb);
CDumpContext& operator<<(const CObject& ob);
CDumpContext& operator<<(LPCTSTR lpsz);
CDumpContext& operator<<(const void* lp);
CDumpContext& operator<<(BYTE by);
CDumpContext& operator<<(WORD w);
CDumpContext& operator<<(DWORD dw);
CDumpContext& operator<<(int n);
CDumpContext& operator<<(double d);
CDumpContext& operator<<(float f);
CDumpContext& operator<<(LONG l);
CDumpContext& operator<<(UINT u);
CDumpContext& operator<<(LPCWSTR lpsz);
CDumpContext& operator<<(LPCSTR lpsz);
CDumpContext& operator<<(LONGLONG n);
CDumpContext& operator<<(ULONGLONG n);
CDumpContext& operator<<(HWND h);
CDumpContext& operator<<(HDC h);
CDumpContext& operator<<(HMENU h);
CDumpContext& operator<<(HACCEL h);
CDumpContext& operator<<(HFONT h);

戻り値

CDumpContext参照。 戻り値を使用すると、1 行のソース コードに複数の挿入を記述できます。

解説

挿入演算子は、 CObject ポインターとほとんどのプリミティブ型に対してオーバーロードされます。 文字へのポインターを指定すると、文字列の内容がダンプされます。 void へのポインターは、アドレスの 16 進ダンプになります。 LONGLONG の場合、64 ビット符号付き整数のダンプが作成されます。ULONGLONG は、64 ビット符号なし整数のダンプになります。

クラスの実装で IMPLEMENT_DYNAMIC または IMPLEMENT_SERIAL マクロを使用する場合、挿入演算子は CObject::Dumpを介して、 CObject派生クラスの名前を出力します。 それ以外の場合は、 CObject出力されます。 クラスの Dump 関数をオーバーライドする場合は、16 進ダンプではなく、オブジェクトの内容のより意味のある出力を提供できます。

#if _DEBUG
CStringList li;
li.AddHead(_T("item 0"));
li.AddHead(_T("item 1"));
CString s = _T("test");
int i = 7;
long lo = 1000000000L;
LONGLONG lolo = 12345678901234i64;
afxDump << _T("list=") << &li << _T("string=")
        << s << _T("int=") << i << _T("long=") << lo
        << _T("LONGLONG=") << lolo << _T("\n");
#endif

CDumpContext::SetDepth

ダンプの深さを設定します。

void SetDepth(int nNewDepth);

パラメーター

nNewDepth
新しい深度値。

解説

他のオブジェクトへのポインターを含まないプリミティブ型または単純な CObject をダンプする場合は、値 0 で十分です。 0 より大きい値は、すべてのオブジェクトが再帰的にダンプされるディープ ダンプを指定します。 たとえば、コレクションのディープ ダンプでは、コレクションのすべての要素がダンプされます。 派生クラスでは、他の特定の深度値を使用できます。

Note

ディープ ダンプでは循環参照が検出されず、無限ループが発生する可能性があります。

#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif

関連項目

階層図
CFile クラス
CObject クラス