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 OutputDebugString
an 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. , CTime
und CTimeSpan
, abgeleitet sind, verfügen überladene CDumpContext
Einfügeoperatoren, wie häufig verwendete Strukturen wie CFileStatus
, CPoint
und CRect
.
Wenn Sie das IMPLEMENT_DYNAMIC- oder IMPLEMENT_SERIAL-Makro in der Implementierung Ihrer Klasse verwenden, CObject::Dump
wird der Name der CObject
abgeleiteten 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 CDumpContext
finden 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 OutputDebugString
an 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::Dump
den Namen der CObject
abgeleiteten 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