Personalizzazione di dump di oggetti
Le informazioni contenute in questo argomento sono valide per:
Edizione |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Solo nativo |
||||
Pro, Premium e Ultimate |
Solo nativo |
Quando si deriva una classe da CObject, è possibile eseguire l'override della funzione membro Dump per fornire ulteriori informazioni quando si utilizza DumpAllObjectsSince per eseguire il dump di oggetti nella finestra Output.
La funzione Dump scrive una rappresentazione testuale delle variabili membro dell'oggetto in un contesto di dump (CDumpContext). Il contesto di dump è analogo a un flusso I/O. È possibile utilizzare l'operatore di inserzione (<<) per inviare dati a CDumpContext.
Quando si esegue l'override della funzione Dump, è opportuno chiamare dapprima la versione della classe base di Dump per effettuare il dump del contenuto dell'oggetto classe base, generando poi una descrizione testuale e un valore per ciascuna variabile membro della classe derivata.
La dichiarazione della funzione Dump sarà del seguente tipo:
class CPerson : public CObject
{
public:
#ifdef _DEBUG
virtual void Dump( CDumpContext& dc ) const;
#endif
CString m_firstName;
CString m_lastName;
// And so on...
};
Dal momento che il dump di oggetti ha senso solo quando si effettua il debug del programma, la dichiarazione della funzione Dump è racchiusa all'interno di un blocco #ifdef _DEBUG / #endif.
Nell'esempio che segue la funzione Dump chiama dapprima la funzione Dump della relativa classe base e poi scrive nel flusso diagnostico una breve descrizione di ciascuna variabile membro, insieme al valore del membro.
#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
È necessario fornire un argomento CDumpContext per specificare la posizione in cui verrà generato l'output del dump. La versione di debug di MFC offre un oggetto CDumpContext predefinito denominato afxDump che invia l'output al debugger.
CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif