共用方式為


CDumpContext 類別

支援使用人類看得懂的格式文字的資料流導向診斷輸出。

語法

class CDumpContext

成員

公用建構函式

名稱 描述
CDumpCoNtext::CDumpCoNtext 建構 CDumpContext 物件。

公用方法

名稱 描述
CDumpCoNtext::D umpAsHex 以十六進位格式傾印指示的專案。
CDumpCoNtext::Flush 排清傾印內容緩衝區中的任何資料。
CDumpCoNtext::GetDepth 取得對應至傾印深度的整數。
CDumpCoNtext::HexDump 以十六進位格式傾印陣列中包含的位元組。
CDumpCoNtext::SetDepth 設定傾印的深度。

公用運算子

名稱 描述
CDumpContext::operator << 將變數和物件插入傾印內容中。

備註

CDumpContext 沒有基類。

您可以針對大部分傾印使用 預先宣告的物件 afxDump CDumpContext afxDump物件僅適用于 Microsoft Foundation Class Library 的偵錯版本。

數個記憶體 診斷服務 會用於 afxDump 其輸出。

在 Windows 環境中,預先定義的 afxDump 物件輸出在概念上類似于 cerr 資料流程,會透過 Windows OutputDebugString 函式路由傳送至偵錯工具。

類別 CDumpContext 具有傾印物件資料之指標的多載插入 ( << ) 運算子 CObject 。 如果您需要衍生物件的自訂傾印格式,請覆寫 CObject::D ump 。 大部分的 Microsoft Foundation 類別都會實作覆寫 Dump 的成員函式。

不是衍生自 CObject 的類別,例如 CStringCTimeCTimeSpan ,有自己的多載 CDumpContext 插入運算子,如 、 CPointCRectCFileStatus 常用結構。

如果您在 類別 實作中使用 IMPLEMENT_DYNAMIC IMPLEMENT_SERIAL 宏,則會 CObject::Dump 列印衍生類別的名稱 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

傾印格式化為十六進位數位的指定型別。

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 物件的參考。

備註

呼叫這個成員函式,將指定類型的專案傾印為十六進位數位。 若要傾印陣列,請呼叫 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

傾印格式化為十六進位數位的位元組陣列。

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

參數

lpszLine
要在新行開頭輸出的字串。

pby
緩衝區的指標,其中包含要傾印的位元組。

nBytes
要傾印的位元組數目。

nWidth
每行傾印的最大位元組數(不是輸出行的寬度)。

備註

若要將單一特定專案類型傾印為十六進位數位,請呼叫 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 。 您可以使用傳回值,在單一源程式碼上撰寫多個插入。

備註

插入運算子會針對 CObject 指標和大多數基本類型多載。 字元指標會導致傾印字串內容;的指標 void 只會產生位址的十六進位傾印。 LONGLONG 會產生 64 位帶正負號整數的傾印;ULONGLONG 會產生 64 位不帶正負號的整數的傾印。

如果您在 類別實作中使用 IMPLEMENT_DYNAMIC 或 IMPLEMENT_SERIAL 宏,則插入運算子 CObject::Dump 會透過 列印衍生類別的名稱 CObject 。 否則,它會列印 CObject 。 如果您覆寫 類別 Dump 的函式,則可以提供更有意義的物件內容輸出,而不是十六進位傾印。

範例

#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 的值會指定以遞迴方式傾印所有物件的深層傾印。 例如,集合的深層傾印將會傾印集合的所有元素。 您可以在衍生類別中使用其他特定深度值。

注意

深層傾印中不會偵測到迴圈參考,而且可能會導致無限迴圈。

範例

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

另請參閱

階層架構圖表
CFile 類別
CObject 類別