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
的類別,例如 CString
、 CTime
和 CTimeSpan
,有自己的多載CDumpContext
插入運算子,如 、 CPoint
和 CRect
等CFileStatus
常用結構。
如果您在類別 實作中使用 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