CDumpContext (clase)

Admite resultados de diagnóstico orientados a secuencia en forma de texto legible.

Sintaxis

class CDumpContext

Miembros

Constructores públicos

Nombre Descripción
CDumpContext::CDumpContext Construye un objeto CDumpContext.

Métodos públicos

Nombre Descripción
CDumpContext::DumpAsHex Vuelca el elemento indicado en formato hexadecimal.
CDumpContext::Flush Vacía los datos del búfer de contexto del volcado.
CDumpContext::GetDepth Obtiene un entero correspondiente a la profundidad del volcado.
CDumpContext::HexDump Bytes de volcados de memoria contenidos en una matriz en formato hexadecimal.
CDumpContext::SetDepth Establece la profundidad del volcado.

Operadores públicos

Nombre Descripción
CDumpContext::operator << Inserta variables y objetos en el contexto de volcado.

Comentarios

CDumpContext no tiene una clase base.

Puede usar afxDump, un objeto CDumpContext declarado previamente, para las mayorías de volcados de memoria. El objeto afxDump solo está disponible en la versión de depuración de la biblioteca MFC (Microsoft Foundation Class).

Varios de los servicios de diagnóstico de memoria usan afxDump para su salida.

En el entorno de Windows, la salida del objeto afxDump predefinido, conceptualmente similar a la secuencia cerr, se enruta al depurador a través de la función OutputDebugString de Windows.

La clase CDumpContext tiene un operador de inserción sobrecargada (<<) para punteros CObject que vuelca los datos del objeto. Si necesita un formato de volcado personalizado para un objeto derivado, invalide CObject::Dump. La mayoría de las clases de Microsoft Foundation implementan una función miembro Dump invalidada.

Las clases que no se derivan de CObject, como CString, CTime y CTimeSpan, tienen sus propios operadores de inserción sobrecargada CDumpContext, igual que las estructuras usadas con frecuencia, como CFileStatus, CPoint y CRect.

Si usa la macro IMPLEMENT_DYNAMIC o IMPLEMENT_SERIAL en la implementación de la clase, CObject::Dump imprimirá el nombre de la clase derivada de CObject. De lo contrario, se imprimirá CObject.

La clase CDumpContext está disponible con las versiones de depuración y lanzamiento de la biblioteca, pero la función miembro Dump solo se define en la versión de depuración. Use las instrucciones #ifdef _DEBUG / #endif para poner entre corchetes el código de diagnóstico, incluidas las funciones miembro Dump personalizadas.

Antes de crear su propio objeto CDumpContext, debe crear un objeto CFile que actúe como destino de volcado.

Para más información sobre CDumpContext, vea Técnicas de depuración de MFC.

#define _DEBUG

Jerarquía de herencia

CDumpContext

Requisitos

Encabezado: afx.h

CDumpContext::CDumpContext

Construye un objeto de clase CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parámetros

pFile
Puntero al objeto CFile que es el destino del volcado.

Comentarios

El objeto afxDump se construye automáticamente.

No escriba en el elemento CFile subyacente mientras el contexto de volcado está activo; de lo contrario, interferirá en él. En el entorno de Windows, la salida se enruta al depurador a través de la función OutputDebugString de Windows.

Ejemplo

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::DumpAsHex

Vuelca el tipo especificado con el formato de números hexadecimales.

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

Valor devuelto

Referencia a un objeto CDumpContext.

Comentarios

Llame a esta función miembro para volcar el elemento del tipo especificado como un número hexadecimal. Para volcar una matriz, llame a CDumpContext::HexDump.

Ejemplo

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

CDumpContext::Flush

Obliga a que los datos restantes en los búferes se escriban en el archivo asociado al contexto de volcado.

void Flush();

Ejemplo

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

Determina si está en proceso un volcado profundo o superficial.

int GetDepth() const;

Valor devuelto

Profundidad del volcado establecido por SetDepth.

Ejemplo

Consulte el ejemplo de SetDepth.

CDumpContext::HexDump

Vuelca una matriz de bytes con formato de números hexadecimales.

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

Parámetros

lpszLine
Cadena que se va a generar al principio de una nueva línea.

pby
Puntero a un búfer que contiene los bytes que se van a volcar.

nBytes
Número de bytes que se van a volcar.

nWidth
Número máximo de bytes volcados por línea (no el ancho de la línea de salida).

Comentarios

Para volcar un solo tipo de elemento específico como un número hexadecimal, llame a CDumpContext::DumpAsHex.

Ejemplo

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

CDumpContext::operator <<

Genera los datos especificados en el contexto de volcado.

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

Valor devuelto

Referencia CDumpContext . Con el valor devuelto, puede escribir varias inserciones en una sola línea de código fuente.

Comentarios

El operador de inserción se sobrecarga para los punteros CObject, así como para la mayoría de los tipos primitivos. Un puntero al carácter da como resultado un volcado del contenido de cadena; un puntero a void da como resultado un volcado hexadecimal de la dirección únicamente. LONGLONG da como resultado un volcado de un entero de 64 bits con signo; ULONGLONG da como resultado un volcado de un entero de 64 bits sin signo.

Si usa la macro IMPLEMENT_DYNAMIC o IMPLEMENT_SERIAL en la implementación de la clase, el operador de inserción, a través de CObject::Dump, imprimirá el nombre de la clase derivada de CObject. De lo contrario, se imprimirá CObject. Si invalida la función Dump de la clase, puede proporcionar una salida más significativa del contenido del objeto en lugar de un volcado hexadecimal.

Ejemplo

#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

Establece la profundidad del volcado.

void SetDepth(int nNewDepth);

Parámetros

nNewDepth
Nuevo valor de profundidad.

Comentarios

Si va a volcar un tipo primitivo o simple CObject que no contiene punteros a otros objetos, un valor 0 es suficiente. Un valor mayor que 0 especifica un volcado profundo en el que todos los objetos se vuelcan de forma recursiva. Por ejemplo, un volcado profundo de una colección volcará todos los elementos de la colección. Puede usar otros valores de profundidad específicos en las clases derivadas.

Nota:

Las referencias circulares no se detectan en volcados profundos y pueden dar lugar a bucles infinitos.

Ejemplo

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

Consulte también

Gráfico de jerarquías
CFile (clase)
CObject (clase)