Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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