Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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