Anpassung von Objektdumps
Dieses Thema gilt für folgende Anwendungsbereiche:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Nur "Systemeigen" |
||||
Pro, Premium und Ultimate |
Nur "Systemeigen" |
Wenn Sie eine Klasse von CObject ableiten, können Sie die Memberfunktion Dump überschreiben, um bei Verwendung von DumpAllObjectsSince für den Objektdump zusätzliche Informationen im Ausgabefenster anzuzeigen.
Die Dump-Funktion gibt eine Textdarstellung der objektspezifischen Membervariablen in einem Dumpkontext (CDumpContext) aus. Der Dumpkontext ist mit einem E/A-Stream vergleichbar. Mithilfe des Anfügeoperators (<<) können Daten an einen CDumpContext gesendet werden.
Wenn Sie die Dump-Funktion überschreiben, sollten Sie zunächst die Basisklassenversion von Dump aufrufen, um den Inhalt des Basisklassenobjekts auszugeben. Lassen Sie für jede Membervariable der abgeleiteten Klasse eine Textdarstellung und einen Wert ausgeben.
Die Deklaration der Dump-Funktion sieht wie folgt aus:
class CPerson : public CObject
{
public:
#ifdef _DEBUG
virtual void Dump( CDumpContext& dc ) const;
#endif
CString m_firstName;
CString m_lastName;
// And so on...
};
Da das Ausgeben von Objekten nur beim Debuggen eines Programms sinnvoll ist, wird die Deklaration der Dump-Funktion in einen #ifdef _DEBUG / #endif-Block eingeschlossen.
Im folgenden Beispiel ruft die Dump-Funktion zuerst die Dump-Funktion für ihre Basisklasse auf. Dann wird eine Kurzbeschreibung jeder Membervariablen sowie der zugehörige Wert in den Diagnosestream geschrieben.
#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
// Call the base class function first.
CObject::Dump( dc );
// Now do the stuff for our specific class.
dc << "last name: " << m_lastName << "\n"
<< "first name: " << m_firstName << "\n";
}
#endif
Sie müssen ein CDumpContext-Argument angeben, um festzulegen, wo der Dump ausgegeben wird. Die Debugversion von MFC bietet ein vordefiniertes CDumpContext-Objekt mit dem Namen afxDump, durch das die Ausgabe an den Debugger gesendet wird.
CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif