CDumpContext クラス

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

構文

class CDumpContext

メンバー

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

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

パブリック メソッド

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

パブリック演算子

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

解説

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

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

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

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

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

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

クラスの実装で IMPLEMENT_DYNAMIC または IMPLEMENT_Standard Edition RIAL マクロを使用する場合は、CObject::Dump-derived クラスの名前がCObject出力されます。 それ以外の場合は、出力 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_Standard Edition RIAL マクロを使用する場合は、挿入演算子 through CObject::Dumpによって-derived クラスの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 クラス