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
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應