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