Personalización de un volcado de objetos
Este tema se aplica a:
Edición |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Sólo para código nativo |
||||
Pro, Premium y Ultimate |
Sólo para código nativo |
Si se deriva una clase de CObject, puede reemplazarse la función miembro Dump para ofrecer información adicional cuando se utiliza DumpAllObjectsSince para realizar un volcado de memoria de objetos en la Ventana de salida.
La función Dump escribe una representación textual de las variables miembro del objeto en un contexto de volcado (CDumpContext). El contexto de volcado es similar a una secuencia de E/S. Se puede utilizar el operador de anexión (<<) para enviar datos a un CDumpContext.
Cuando se reemplaza la función Dump, primero se debería llamar a la versión de la clase base de Dump para realizar un volcado del contenido del objeto de la clase base. A continuación, se escribe una descripción textual y un valor descriptivo para cada variable miembro de la clase derivada.
La declaración de la función Dump presenta el siguiente aspecto:
class CPerson : public CObject
{
public:
#ifdef _DEBUG
virtual void Dump( CDumpContext& dc ) const;
#endif
CString m_firstName;
CString m_lastName;
// And so on...
};
Como el volcado de objetos sólo tiene sentido en la depuración del programa, la declaración de la función Dump se encuentra encerrada en un bloque #ifdef _DEBUG / #endif.
En el siguiente ejemplo, la función Dump llama primero a la función Dump para su clase base. A continuación, escribe una breve descripción de cada variable miembro, junto con el valor del miembro, en la secuencia de diagnóstico.
#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
Se debe suministrar un argumento CDumpContext que especifique dónde se escribirá el resultado del volcado. La versión de depuración de MFC suministra un objeto CDumpContext predefinido denominado afxDump que envía los resultados al depurador.
CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif