Partilhar via


Classe CDumpContext

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Suporta saída de diagnóstico orientada a fluxos sob a forma de texto legível por humanos.

Sintaxe

class CDumpContext

Membros

Construtores Públicos

Nome Description
CDumpContext::CDumpContext Constrói um CDumpContext objeto.

Métodos Públicos

Nome Description
CDumpContext::D umpAsHex Despeja o item indicado em formato hexadecimal.
CDumpContext::Flush Limpa qualquer dado no buffer de contexto do dump.
CDumpContext::GetDepth Obtém um inteiro correspondente à profundidade do dump.
CDumpContext::HexDump Despeja bytes contidos num array em formato hexadecimal.
CDumpContexto::SetDepth Define a profundidade do depósito.

Operadores Públicos

Nome Description
CDumpContext::operator << Insere variáveis e objetos no contexto do dump.

Observações

CDumpContext não tem uma classe base.

Podes usar o afxDump, um objeto pré-declarado CDumpContext , para a maior parte do teu dumping. O afxDump objeto está disponível apenas na versão Debug da Microsoft Foundation Class Library.

Vários dos serviços de diagnóstico de memória são usados afxDump para a sua saída.

No ambiente Windows, a saída do objeto predefinido afxDump , conceptualmente semelhante ao cerr fluxo, é encaminhada para o depurador através da função OutputDebugStringWindows .

A CDumpContext classe tem um operador de inserção sobrecarregada ( <<) para CObject apontadores que despeja os dados do objeto. Se precisares de um formato de dump personalizado para um objeto derivado, substitui o CObject::D ump. A maioria das classes Microsoft Foundation implementa Dump uma função de membro sobreposto.

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

Se usares a macro IMPLEMENT_DYNAMIC ou IMPLEMENT_SERIAL na implementação da tua classe, então CObject::Dump imprimirás o nome da tua CObjectclasse derivada. Caso contrário, irá imprimir CObject.

A CDumpContext classe está disponível tanto com as versões Debug como Release da biblioteca, mas a Dump função membro está definida apenas na versão Debug. Use #ifdef _DEBUG / #endif instruções para colocar o seu código de diagnóstico entre parênteses, incluindo as funções personalizadas Dump dos membros.

Antes de criares o teu próprio CDumpContext objeto, deves criar um CFile objeto que sirva como destino de dump.

Para obter mais informações sobre CDumpContext, consulte Debugging MFC Applications.

#define _DEBUG

Hierarquia de herança

CDumpContext

Requerimentos

Cabeçalho: afx.h

CDumpContext::CDumpContext

Constrói um objeto de classe CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parâmetros

PFile
Um apontador para o CFile objeto que é o destino do dump.

Observações

O afxDump objeto é construído automaticamente.

Não escreva no subjacente CFile enquanto o contexto do dump estiver ativo; caso contrário, irá interferir com o dump. No ambiente Windows, a saída é encaminhada para o depurador através da função OutputDebugStringWindows.

Example

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::D umpAsHex

Despeja o tipo especificado formatado como números hexadecimais.

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.

Observações

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

Example

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

CDumpContext::Flush

Força que quaisquer dados restantes nos buffers sejam escritos no ficheiro associado ao contexto de dump.

void Flush();

Example

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

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

int GetDepth() const;

Valor de retorno

A profundidade do dump definida por SetDepth.

Example

Veja o exemplo para SetDepth.

CDumpContext::HexDump

Despeja um array de bytes formatados como números hexadecimais.

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

Parâmetros

lpszLine
Uma cadeia para produzir no início de uma nova linha.

PBY
Um ponteiro para um buffer contendo os bytes a despejar.

nBytes
O número de bytes a despejar.

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

Observações

Para despejar um único tipo de item específico como um número hexadecimal, ligue para CDumpContext::D umpAsHex.

Example

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

CDumpContext::operator <<

Exporta os dados especificados para o contexto de dump.

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 CDumpContext referência. Usando o valor de retorno, pode escrever múltiplas inserções numa única linha de código-fonte.

Observações

O operador de inserção é sobrecarregado tanto para CObject apontadores como para a maioria dos tipos primitivos. Um apontador para um carácter resulta num despejo do conteúdo da cadeia; um apontador para void resulta num dump hexadecimal apenas do endereço. Um LONGLONG resulta num dump de um inteiro assinado de 64 bits; Um ULONGLONG resulta num dump de um inteiro sem sinal de 64 bits.

Se usar a macro IMPLEMENT_DYNAMIC ou IMPLEMENT_SERIAL na implementação da sua classe, então o operador de inserção, através de CObject::Dump, irá imprimir o nome da sua CObjectclasse derivada em . Caso contrário, irá imprimir CObject. Se sobrescreveres a Dump função da classe, podes fornecer uma saída mais significativa do conteúdo do objeto em vez de um dump hexadecimal.

Example

#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

CDumpContexto::SetDepth

Define a profundidade para o depósito.

void SetDepth(int nNewDepth);

Parâmetros

nNewDepth
O novo valor de profundidade.

Observações

Se estiver a despejar um tipo primitivo ou simples CObject que não contém apontadores para outros objetos, então um valor de 0 é suficiente. Um valor maior que 0 especifica um dump profundo onde todos os objetos são despejados recursivamente. Por exemplo, um dump profundo de uma coleção irá despejar todos os elementos da coleção. Podes usar outros valores de profundidade específicos nas tuas classes derivadas.

Observação

Referências circulares não são detetadas em dumps profundos e podem resultar em laços infinitos.

Example

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

Consulte também

Gráfico de Hierarquia
Classe CFile
CObject Classe