Freigeben über


CDumpContext-Klasse

Unterstützt die Darstellung gestreamter Diagnoseausgaben als Klartext.

Syntax

class CDumpContext

Member

Öffentliche Konstruktoren

Name Beschreibung
CDumpContext::CDumpContext Erstellt ein CDumpContext-Objekt.

Öffentliche Methoden

Name Beschreibung
CDumpContext::D umpAsHex Gibt das angegebene Element im Hexadezimalformat ab.
CDumpContext::Flush Löscht alle Daten im Speicherabbildkontextpuffer.
CDumpContext::GetDepth Ruft eine ganze Zahl ab, die der Tiefe des Speicherabbilds entspricht.
CDumpContext::HexDump Abbilden von Bytes, die in einem Array im Hexadezimalformat enthalten sind.
CDumpContext::SetDepth Legt die Tiefe des Dumps fest.

Öffentliche Operatoren

Name Beschreibung
CDumpContext::operator << Fügt Variablen und Objekte in den Dumpkontext ein.

Hinweise

CDumpContext besitzt keine Basisklasse.

Sie können afxDump, ein vordefiniertes CDumpContext Objekt, für den Großteil Ihres Dumpings verwenden. Das afxDump Objekt ist nur in der Debugversion der Microsoft Foundation-Klassenbibliothek verfügbar.

Einige der Speicherdiagnosedienste verwenden afxDump ihre Ausgabe.

Unter der Windows-Umgebung wird die Ausgabe des vordefinierten afxDump Objekts, konzeptionell ähnlich dem cerr Datenstrom, über die Windows-Funktion OutputDebugStringan den Debugger weitergeleitet.

Die CDumpContext Klasse verfügt über einen überladenen Einfügeoperator ( <<) für CObject Zeiger, die die Daten des Objekts abbilden. Wenn Sie ein benutzerdefiniertes Dumpformat für ein abgeleitetes Objekt benötigen, überschreiben Sie CObject::D ump. Die meisten Microsoft Foundation-Klassen implementieren eine überschriebene Dump Memberfunktion.

Klassen, die nicht von CObject, z CString. B. , CTimeund CTimeSpan, abgeleitet sind, verfügen überladene CDumpContext Einfügeoperatoren, wie häufig verwendete Strukturen wie CFileStatus, CPointund CRect.

Wenn Sie das IMPLEMENT_DYNAMIC- oder IMPLEMENT_SERIAL-Makro in der Implementierung Ihrer Klasse verwenden, CObject::Dump wird der Name der CObjectabgeleiteten Klasse gedruckt. Andernfalls wird sie gedruckt CObject.

Die CDumpContext Klasse ist sowohl mit der Debug- als auch der Releaseversion der Bibliothek verfügbar, die Memberfunktion ist jedoch Dump nur in der Debugversion definiert. Verwenden Sie #ifdef _DEBUG#endif / Anweisungen, um Ihren Diagnosecode zu klammern, einschließlich ihrer benutzerdefinierten Dump Memberfunktionen.

Bevor Sie ein eigenes CDumpContext Objekt erstellen, müssen Sie ein CFile Objekt erstellen, das als Speicherabbildziel dient.

Weitere Informationen CDumpContextfinden Sie unter Debuggen von MFC-Anwendungen.

#define _DEBUG

Vererbungshierarchie

CDumpContext

Anforderungen

Header: afx.h

CDumpContext::CDumpContext

Erstellt ein Objekt der Klasse CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parameter

pFile
Ein Zeiger auf das CFile Objekt, das das Speicherabbildziel ist.

Hinweise

Das afxDump Objekt wird automatisch erstellt.

Schreiben Sie nicht in den zugrunde liegenden CFile Hintergrund, während der Dumpkontext aktiv ist. Andernfalls stören Sie das Dump. Unter der Windows-Umgebung wird die Ausgabe über die Windows-Funktion OutputDebugStringan den Debugger weitergeleitet.

Beispiel

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

Gibt den angegebenen Typ ab, der als hexadezimale Zahlen formatiert ist.

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);

Rückgabewert

Ein Verweis auf ein CDumpContext-Objekt.

Hinweise

Rufen Sie diese Memberfunktion auf, um das Element des angegebenen Typs als hexadezimale Zahl abzubilden. Rufen Sie zum Abbilden eines Arrays CDumpContext::HexDump auf.

Beispiel

#if _DEBUG
afxDump.DumpAsHex(115);
#endif

CDumpContext::Flush

Erzwingt, dass alle daten, die in Puffern verbleiben, in die Datei geschrieben werden, die dem Speicherabbildkontext zugeordnet ist.

void Flush();

Beispiel

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

Bestimmt, ob ein tief oder flacher Speicherabbild verarbeitet wird.

int GetDepth() const;

Rückgabewert

Die Tiefe des Dumps, wie festgelegt nach SetDepth.

Beispiel

Sehen Sie sich das Beispiel für SetDepth an.

CDumpContext::HexDump

Gibt ein Array von Bytes ab, die als hexadezimale Zahlen formatiert sind.

void HexDump(
    LPCTSTR lpszLine,
    BYTE* pby,
    int nBytes,
    int nWidth);

Parameter

lpszLine
Eine Zeichenfolge, die am Anfang einer neuen Zeile ausgegeben werden soll.

Pby
Ein Zeiger auf einen Puffer, der die zu abbildden Bytes enthält.

nBytes
Die Anzahl der zu sichernden Bytes.

nWidth
Maximale Anzahl der pro Zeile gedumpten Bytes (nicht die Breite der Ausgabezeile).

Hinweise

Rufen Sie CDumpContext::D umpAsHex auf, um einen einzelnen, bestimmten Elementtyp als hexadezimale Zahl abzubilden.

Beispiel

#if _DEBUG
TCHAR test[] = _T("This is a test of CDumpContext::HexDump\n");
afxDump.HexDump(_T("."), (BYTE *)test, sizeof(test), 20);
#endif

CDumpContext::operator <<

Gibt die angegebenen Daten in den Speicherabbildkontext aus.

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);

Rückgabewert

Ein CDumpContext Verweis. Mithilfe des Rückgabewerts können Sie mehrere Einfügungen in eine einzelne Zeile des Quellcodes schreiben.

Hinweise

Der Einfügeoperator wird sowohl für CObject Zeiger als auch für die meisten Grundtypen überladen. Ein Zeiger auf Zeichen führt zu einem Abbild von Zeichenfolgeninhalten; ein Zeiger, der zu void einem hexadezimalen Speicherabbild der Adresse führt. A LONGLONG results in a dump of a 64 bit signed integer; Ein ULONGLONG führt zu einem Dump einer 64-Bit-ganzzahl ohne Vorzeichen.

Wenn Sie das IMPLEMENT_DYNAMIC- oder IMPLEMENT_SERIAL-Makro in der Implementierung Der Klasse verwenden, wird der Einfügeoperator durch den Einfügeoperator durch CObject::Dumpden Namen der CObjectabgeleiteten Klasse gedruckt. Andernfalls wird sie gedruckt CObject. Wenn Sie die Dump Funktion der Klasse außer Kraft setzen, können Sie anstelle eines Hexadezimalabbilds eine aussagekräftigere Ausgabe des Objektinhalts bereitstellen.

Beispiel

#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

Legt die Tiefe für das Dump fest.

void SetDepth(int nNewDepth);

Parameter

nNewDepth
Der neue Tiefenwert.

Hinweise

Wenn Sie einen Primitiventyp oder ein einfaches CObject Dumping ausführen, das keine Zeiger auf andere Objekte enthält, reicht ein Wert von 0 aus. Ein Wert größer als 0 gibt ein deep dump an, in dem alle Objekte rekursiv gedumpt werden. Ein deep dump einer Auflistung wird beispielsweise alle Elemente der Auflistung abbilden. Sie können andere spezifische Tiefenwerte in ihren abgeleiteten Klassen verwenden.

Hinweis

Zirkelbezüge werden in tiefen Dumps nicht erkannt und können zu endlosen Schleifen führen.

Beispiel

#if _DEBUG
afxDump.SetDepth(1); // Specifies deep dump
ASSERT(afxDump.GetDepth() == 1);
#endif

Siehe auch

Hierarchiediagramm
CFile-Klasse
CObject-Klasse