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
メンバー関数を実装します。
CString
、CTime
、CTimeSpan
など、CObject
から派生しないクラスには、CFileStatus
、CPoint
、CRect
などのよく使用される構造体と同様に、独自のオーバーロードされたCDumpContext
挿入演算子があります。
クラスの実装で IMPLEMENT_DYNAMIC または IMPLEMENT_SERIAL マクロを使用する場合、 CObject::Dump
は CObject
派生クラスの名前を出力します。 それ以外の場合は、 CObject
出力されます。
CDumpContext
クラスは、ライブラリの Debug バージョンと Release バージョンの両方で使用できますが、Dump
メンバー関数はデバッグ バージョンでのみ定義されます。 #ifdef _DEBUG / #endif
ステートメントを使用して、カスタム Dump
メンバー関数を含む診断コードを角かっこで囲みます。
独自の CDumpContext
オブジェクトを作成する前に、ダンプ先として機能する CFile
オブジェクトを作成する必要があります。
CDumpContext
の詳細については、「
#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