Kelas CDumpContext
Mendukung output diagnostik berorientasi aliran dalam bentuk teks yang dapat dibaca manusia.
Sintaks
class CDumpContext
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CDumpContext::CDumpContext | Membuat CDumpContext objek. |
Metode Publik
Nama | Deskripsi |
---|---|
CDumpContext::D umpAsHex | Mencadangkan item yang ditunjukkan dalam format heksadesimal. |
CDumpContext::Flush | Bersihkan data apa pun di buffer konteks cadangan. |
CDumpContext::GetDepth | Mendapatkan bilangan bulat yang sesuai dengan kedalaman cadangan. |
CDumpContext::HexDump | Dump byte yang terkandung dalam array dalam format heksadesimal. |
CDumpContext::SetDepth | Mengatur kedalaman cadangan. |
Operator Publik
Nama | Deskripsi |
---|---|
CDumpContext::operator << |
Menyisipkan variabel dan objek ke dalam konteks cadangan. |
Keterangan
CDumpContext
tidak memiliki kelas dasar.
Anda dapat menggunakan afxDump, objek yang telah CDumpContext
ditentukan sebelumnya, untuk sebagian besar dumping Anda. Objek afxDump
hanya tersedia di versi Debug Pustaka Kelas Microsoft Foundation.
Beberapa layanan diagnostik memori digunakan afxDump
untuk outputnya.
Di bawah lingkungan Windows, output dari objek yang telah afxDump
ditentukan sebelumnya, secara konseptual mirip cerr
dengan aliran, dirutekan ke debugger melalui fungsi OutputDebugString
Windows .
Kelas CDumpContext
memiliki operator penyisipan ( <<) yang kelebihan beban untuk CObject
penunjuk yang mencadangkan data objek. Jika Anda memerlukan format cadangan kustom untuk objek turunan, ambil alih CObject::D ump. Sebagian besar kelas Microsoft Foundation menerapkan fungsi anggota yang ditimpa Dump
.
Kelas yang tidak berasal dari CObject
, seperti CString
, , CTime
dan CTimeSpan
, memiliki operator penyisipan kelebihan beban CDumpContext
mereka sendiri, seperti struktur yang sering digunakan seperti CFileStatus
, , CPoint
dan CRect
.
Jika Anda menggunakan makro IMPLEMENT_DYNAMIC atau IMPLEMENT_SERIAL dalam implementasi kelas Anda, maka CObject::Dump
akan mencetak nama kelas turunan Anda CObject
. Jika tidak, itu akan mencetak CObject
.
Kelas CDumpContext
ini tersedia dengan versi Debug dan Rilis pustaka, tetapi Dump
fungsi anggota hanya ditentukan dalam versi Debug. Gunakan pernyataan #ifdef _DEBUG#endif
/ untuk membungkus kode diagnostik Anda, termasuk fungsi anggota kustom Dump
Anda.
Sebelum membuat objek Anda sendiri CDumpContext
, Anda harus membuat CFile
objek yang berfungsi sebagai tujuan cadangan.
Untuk informasi selengkapnya tentang CDumpContext
, lihat Men-debug Aplikasi MFC.
#define _DEBUG
Hierarki Warisan
CDumpContext
Persyaratan
Header: afx.h
CDumpContext::CDumpContext
Membangun objek kelas CDumpContext
.
CDumpContext(CFile* pFile = NULL);
Parameter
pFile
Penunjuk ke CFile
objek yang merupakan tujuan cadangan.
Keterangan
Objek afxDump
dibuat secara otomatis.
Jangan menulis ke yang mendasar CFile
saat konteks cadangan aktif; jika tidak, Anda akan mengganggu dump. Di bawah lingkungan Windows, output dirutekan ke debugger melalui fungsi OutputDebugString
Windows .
Contoh
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
Mencadangkan jenis yang ditentukan yang diformat sebagai angka heksadesimal.
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);
Tampilkan Nilai
Referensi ke CDumpContext
objek.
Keterangan
Panggil fungsi anggota ini untuk mencadangkan item dari jenis yang ditentukan sebagai nomor heksadesimal. Untuk mencadangkan array, panggil CDumpContext::HexDump.
Contoh
#if _DEBUG
afxDump.DumpAsHex(115);
#endif
CDumpContext::Flush
Memaksa data apa pun yang tersisa dalam buffer untuk ditulis ke file yang dilampirkan ke konteks cadangan.
void Flush();
Contoh
#if _DEBUG
afxDump.Flush();
#endif
CDumpContext::GetDepth
Menentukan apakah cadangan dalam atau dangkal sedang dalam proses.
int GetDepth() const;
Tampilkan Nilai
Kedalaman cadangan sebagaimana diatur oleh SetDepth
.
Contoh
Lihat contoh untuk SetDepth.
CDumpContext::HexDump
Mencadangkan array byte yang diformat sebagai angka heksadesimal.
void HexDump(
LPCTSTR lpszLine,
BYTE* pby,
int nBytes,
int nWidth);
Parameter
lpszLine
String yang akan dihasilkan di awal baris baru.
pby
Penunjuk ke buffer yang berisi byte untuk dibuang.
nByte
Jumlah byte yang akan dibuang.
nWidth
Jumlah maksimum byte yang dibuang per baris (bukan lebar baris output).
Keterangan
Untuk mencadangkan satu jenis item tertentu sebagai nomor heksadesimal, panggil CDumpContext::D umpAsHex.
Contoh
#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif
CDumpContext::operator <<
Menghasilkan data yang ditentukan ke konteks cadangan.
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);
Tampilkan Nilai
Referensi CDumpContext
. Dengan menggunakan nilai yang dikembalikan, Anda dapat menulis beberapa penyisipan pada satu baris kode sumber.
Keterangan
Operator penyisipan kelebihan beban untuk CObject
penunjuk serta untuk sebagian besar jenis primitif. Penunjuk ke karakter menghasilkan cadangan konten string; penunjuk untuk void
menghasilkan cadangan heksadesimal alamat saja. LONGLONG menghasilkan cadangan bilangan bulat bertanda 64-bit; ULONGLONG menghasilkan cadangan bilangan bulat yang tidak ditandatangani 64-bit.
Jika Anda menggunakan makro IMPLEMENT_DYNAMIC atau IMPLEMENT_SERIAL dalam implementasi kelas Anda, maka operator penyisipan, melalui CObject::Dump
, akan mencetak nama kelas turunan Anda CObject
. Jika tidak, itu akan mencetak CObject
. Jika Anda mengambil Dump
alih fungsi kelas, maka Anda dapat memberikan output konten objek yang lebih bermakna alih-alih cadangan heksadesimal.
Contoh
#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
Mengatur kedalaman untuk cadangan.
void SetDepth(int nNewDepth);
Parameter
nNewDepth
Nilai kedalaman baru.
Keterangan
Jika Anda membuang jenis primitif atau sederhana CObject
yang tidak berisi pointer ke objek lain, maka nilai 0 sudah cukup. Nilai yang lebih besar dari 0 menentukan dump dalam di mana semua objek dibuang secara rekursif. Misalnya, cadangan mendalam koleksi akan membuang semua elemen koleksi. Anda dapat menggunakan nilai kedalaman spesifik lainnya di kelas turunan Anda.
Catatan
Referensi melingkar tidak terdeteksi dalam dump yang dalam dan dapat mengakibatkan perulangan tak terbatas.
Contoh
#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif