Bagikan melalui


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 OutputDebugStringWindows .

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, , CTimedan CTimeSpan, memiliki operator penyisipan kelebihan beban CDumpContext mereka sendiri, seperti struktur yang sering digunakan seperti CFileStatus, , CPointdan 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 OutputDebugStringWindows .

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

Lihat juga

Bagan Hierarki
Kelas CFile
Kelas CObject