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
メンバー関数を実装します。
、などCTime
CTimeSpan
CString
、からCObject
派生していないクラスには、よく使用される構造体CFileStatus
CRect
CPoint
のように、独自のオーバーロードされた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
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示