Compartilhar via


Classe CDumpContext

Dá suporte à saída de diagnóstico orientada a fluxo na forma de texto legível por humanos.

Sintaxe

class CDumpContext

Membros

Construtores públicos

Nome Descrição
CDumpContext::CDumpContext Constrói um objeto CDumpContext.

Métodos públicos

Nome Descrição
CDumpContext::DumpAsHex Despeja o item indicado no formato hexadecimal.
CDumpContext::Flush Libera todos os dados no buffer de contexto de despejo.
CDumpContext::GetDepth Obtém um inteiro correspondente à profundidade do despejo.
CDumpContext::HexDump Despeja bytes contidos em uma matriz no formato hexadecimal.
CDumpContext::SetDepth Define a profundidade do despejo.

Operadores públicos

Nome Descrição
CDumpContext::operator << Insere variáveis e objetos no contexto de despejo.

Comentários

CDumpContext não tem uma classe base.

Você pode usar afxDump, um objeto CDumpContext pré-declarado, para a maior parte do despejo. O objeto afxDump está disponível apenas na versão de depuração da biblioteca Microsoft Foundation Class.

Vários dos serviços de diagnóstico de memória usam afxDump para sua saída.

No ambiente do Windows, a saída do objeto predefinido afxDump, conceitualmente semelhante ao fluxo cerr, é roteada para o depurador por meio da função do Windows OutputDebugString.

A classe CDumpContext tem um operador de inserção (<<) sobrecarregado para ponteiros CObject que despejam os dados do objeto. Se você precisar de um formato de despejo personalizado para um objeto derivado, substitua CObject::Dump. A maioria das classes do Microsoft Foundation implementa uma função membro Dump substituída.

Classes que não são derivadas de CObject, como CString, CTime e CTimeSpan, têm os próprios operadores de inserção sobrecarregados CDumpContext, assim como estruturas frequentemente usadas, como CFileStatus, CPoint e CRect.

Se você usar a macro IMPLEMENT_DYNAMIC ou IMPLEMENT_SERIAL na implementação da classe, CObject::Dump imprimirá o nome da classe derivada de CObject. Caso contrário, ele imprimirá CObject.

A classe CDumpContext está disponível com as versões Depuração e Versão da biblioteca, mas a função de membro Dump é definida apenas na versão de depuração. Use instruções #ifdef _DEBUG / #endif para colocar o código de diagnóstico entre colchetes, incluindo suas funções de membro Dump personalizadas.

Antes de criar seu objeto CDumpContext, crie um objeto CFile que serve como destino de despejo.

Para obter mais informações sobre CDumpContext, confira Como depurar aplicativos MFC.

#define _DEBUG

Hierarquia de herança

CDumpContext

Requisitos

Cabeçalho: afx.h

CDumpContext::CDumpContext

Constrói um objeto de classe CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parâmetros

pFile
Um ponteiro para o objeto CFile que é o destino de despejo.

Comentários

O objeto afxDump é construído automaticamente.

Não escreva no CFile subjacente enquanto o contexto de despejo estiver ativo; caso contrário, você interferirá no despejo. No ambiente do Windows, a saída é roteada para o depurador por meio da função do Windows OutputDebugString.

Exemplo

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

Despeja o tipo especificado formatado como números hexadecimal.

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 de retorno

Uma referência a um objeto CDumpContext.

Comentários

Chame essa função de membro para despejar o item do tipo especificado como um número hexadecimal. Para despejar uma matriz, chame CDumpContext::HexDump.

Exemplo

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

CDumpContext::Flush

Força os dados restantes em buffers a serem gravados no arquivo anexado ao contexto de despejo.

void Flush();

Exemplo

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

Determina se um despejo profundo ou raso está em processo.

int GetDepth() const;

Valor de retorno

A profundidade do despejo conforme definida por SetDepth.

Exemplo

Confira o exemplo de SetDepth.

CDumpContext::HexDump

Despeja uma matriz de bytes formatados como números hexadecimal.

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

Parâmetros

lpszLine
Uma cadeia de caracteres a ser saída no início de uma nova linha.

pby
Um ponteiro para um buffer que contém os bytes a serem despejados.

nBytes
O número de bytes a serem despejados.

nWidth
Número máximo de bytes despejados por linha (não a largura da linha de saída).

Comentários

Para despejar um só tipo de item específico como um número hexadecimal, chame CDumpContext::DumpAsHex.

Exemplo

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

CDumpContext::operator <<

Gera os dados especificados para o contexto de despejo.

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 de retorno

Uma referência a CDumpContext. Usando o valor retornado, você pode escrever várias inserções em uma só linha de código-fonte.

Comentários

O operador de inserção é sobrecarregado para ponteiros CObject, bem como para a maioria dos tipos primitivos. Um ponteiro para caractere resulta em um despejo de conteúdo de cadeia de caracteres; um ponteiro para void resulta em um despejo hexadecimal somente do endereço. Um LONGLONG resulta em um despejo de um inteiro com sinal de 64 bits; Um ULONGLONG resulta em um despejo de um inteiro sem sinal de 64 bits.

Se você usar a macro IMPLEMENT_DYNAMIC ou IMPLEMENT_SERIAL na implementação de sua classe, o operador de inserção, por meio CObject::Dump, imprimirá o nome da classe derivada de CObject. Caso contrário, ele imprimirá CObject. Se você substituir a função Dump da classe, poderá fornecer uma saída mais significativa do conteúdo do objeto em vez de um despejo hexadecimal.

Exemplo

#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

Define a profundidade para o despejo.

void SetDepth(int nNewDepth);

Parâmetros

nNewDepth
O novo valor de profundidade.

Comentários

Se você estiver despejando um tipo primitivo ou simples CObject que não contém ponteiros para outros objetos, um valor de 0 será suficiente. Um valor maior que 0 especifica um despejo profundo em que todos os objetos são despejados recursivamente. Por exemplo, um despejo profundo de uma coleção despejará todos os elementos da coleção. Você pode usar outros valores de profundidade específicos em suas classes derivadas.

Observação

Referências circulares não são detectadas em despejos profundos e podem resultar em loops infinitos.

Exemplo

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

Confira também

Gráfico da hierarquia
Classe CFile
Classe CObject