共用方式為


CDumpContext 類別

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

語法

class CDumpContext

成員

公用建構函式

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

公用方法

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

公用運算子

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

備註

CDumpContext 沒有基類。

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

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

在 Windows 環境中,預先定義的 afxDump 對象輸出在概念上類似於 cerr 數據流,會透過 Windows OutputDebugString函式路由傳送至調試程式。

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

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

如果您在類別 實作中使用IMPLEMENT_DYNAMICIMPLEMENT_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 類別