Condividi tramite


Classe CDumpContext

Supporta l'output di diagnostica orientato al flusso sotto forma di testo leggibile.

Sintassi

class CDumpContext

Membri

Costruttori pubblici

Nome Descrizione
CDumpContext::CDumpContext Costruisce un oggetto CDumpContext.

Metodi pubblici

Nome Descrizione
CDumpContext::D umpAsHex Esegue il dump dell'elemento indicato in formato esadecimale.
CDumpContext::Flush Scarica tutti i dati nel buffer del contesto di dump.
CDumpContext::GetDepth Ottiene un numero intero corrispondente alla profondità del dump.
CDumpContext::HexDump Esegue il dump dei byte contenuti in una matrice in formato esadecimale.
CDumpContext::SetDepth Imposta la profondità del dump.

Operatori pubblici

Nome Descrizione
CDumpContext::operator << Inserisce variabili e oggetti nel contesto di dump.

Osservazioni:

CDumpContext non dispone di una classe di base.

È possibile utilizzare afxDump, un oggetto predeclaro CDumpContext , per la maggior parte del dump. L'oggetto afxDump è disponibile solo nella versione Debug della libreria di classi Microsoft Foundation.

Diversi servizi di diagnostica della memoria usano afxDump per l'output.

Nell'ambiente Windows l'output dell'oggetto predefinito afxDump , concettualmente simile al cerr flusso, viene instradato al debugger tramite la funzione OutputDebugStringWindows .

La CDumpContext classe dispone di un operatore di inserimento di overload ( <<) per CObject i puntatori che esegue il dump dei dati dell'oggetto. Se è necessario un formato di dump personalizzato per un oggetto derivato, eseguire l'override di CObject::D ump. La maggior parte delle classi Microsoft Foundation implementa una funzione membro sottoposta a Dump override.

Le classi non derivate da CObject, ad esempio , CTimee CTimeSpan, hanno operatori di inserimento di CDumpContext overload personalizzati, come le strutture usate spesso, ad CFileStatusesempio CString, CPointe CRect.

Se si usa la macro IMPLEMENT_DYNAMIC o IMPLEMENT_edizione Standard RIAL nell'implementazione della classe, CObject::Dump verrà stampato il nome della CObjectclasse derivata da . In caso contrario, verrà stampato CObject.

La CDumpContext classe è disponibile sia con le versioni Debug che Release della libreria, ma la Dump funzione membro è definita solo nella versione Debug. Usare #ifdef _DEBUG#endif / istruzioni per inserire tra parentesi il codice di diagnostica, incluse le funzioni membro personalizzate.Dump

Prima di creare un oggetto personalizzato CDumpContext , è necessario creare un CFile oggetto che funge da destinazione di dump.

Per altre informazioni su CDumpContext, vedere Debug di applicazioni MFC.

#define _DEBUG

Gerarchia di ereditarietà

CDumpContext

Requisiti

Intestazione: afx.h

CDumpContext::CDumpContext

Costruisce un oggetto della classe CDumpContext.

CDumpContext(CFile* pFile = NULL);

Parametri

pFile
Puntatore all'oggetto CFile che rappresenta la destinazione del dump.

Osservazioni:

L'oggetto afxDump viene costruito automaticamente.

Non scrivere nell'oggetto sottostante CFile mentre il contesto di dump è attivo. In caso contrario, si interferirà con il dump. Nell'ambiente Windows l'output viene indirizzato al debugger tramite la funzione OutputDebugStringWindows .

Esempio

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

Esegue il dump del tipo specificato formattato come numeri esadecimali.

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);

Valore restituito

Riferimento a un oggetto CDumpContext.

Osservazioni:

Chiamare questa funzione membro per eseguire il dump dell'elemento del tipo specificato come numero esadecimale. Per eseguire il dump di una matrice, chiamare CDumpContext::HexDump.

Esempio

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

CDumpContext::Flush

Forza la scrittura dei dati rimanenti nei buffer nel file collegato al contesto di dump.

void Flush();

Esempio

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext::GetDepth

Determina se un dump profondo o superficiale è in corso.

int GetDepth() const;

Valore restituito

Profondità del dump impostato da SetDepth.

Esempio

Vedere l'esempio per SetDepth.

CDumpContext::HexDump

Esegue il dump di una matrice di byte formattati come numeri esadecimali.

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

Parametri

lpszLine
Stringa da restituire all'inizio di una nuova riga.

pby
Puntatore a un buffer contenente i byte da eseguire nel dump.

nBytes
Numero di byte di cui eseguire il dump.

nWidth
Numero massimo di byte di cui è stato eseguito il dump per riga (non la larghezza della riga di output).

Osservazioni:

Per eseguire il dump di un singolo tipo di elemento specifico come numero esadecimale, chiamare CDumpContext::D umpAsHex.

Esempio

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

CDumpContext::operator <<

Restituisce i dati specificati nel contesto di 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);

Valore restituito

Riferimento CDumpContext . Usando il valore restituito, è possibile scrivere più inserimenti in una singola riga di codice sorgente.

Osservazioni:

L'operatore di inserimento è sottoposto a overload per CObject i puntatori e per la maggior parte dei tipi primitivi. Un puntatore al carattere comporta un dump del contenuto della stringa; un puntatore a restituisce void un dump esadecimale solo dell'indirizzo. UN LONGLONG genera un dump di un intero con segno a 64 bit; ULONGLONG genera un dump di un intero senza segno a 64 bit.

Se si utilizza la macro IMPLEMENT_DYNAMIC o IMPLEMENT_edizione Standard RIAL nell'implementazione della classe, l'operatore di inserimento, tramite CObject::Dump, stamperà il nome della CObjectclasse derivata da . In caso contrario, verrà stampato CObject. Se si esegue l'override della Dump funzione della classe , è possibile fornire un output più significativo del contenuto dell'oggetto anziché un dump esadecimale.

Esempio

#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

Imposta la profondità per il dump.

void SetDepth(int nNewDepth);

Parametri

nNewDepth
Nuovo valore di profondità.

Osservazioni:

Se si esegue il dump di un tipo primitivo o semplice CObject che non contiene puntatori ad altri oggetti, è sufficiente un valore pari a 0. Un valore maggiore di 0 specifica un dump profondo in cui tutti gli oggetti vengono scaricati in modo ricorsivo. Ad esempio, un dump profondo di una raccolta eseguirà il dump di tutti gli elementi della raccolta. È possibile usare altri valori di profondità specifici nelle classi derivate.

Nota

I riferimenti circolari non vengono rilevati nei dump profondi e possono comportare cicli infiniti.

Esempio

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

Vedi anche

Grafico della gerarchia
Classe CFile
Classe CObject