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 OutputDebugString
Windows .
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 , CTime
e CTimeSpan
, hanno operatori di inserimento di CDumpContext
overload personalizzati, come le strutture usate spesso, ad CFileStatus
esempio CString
, CPoint
e CRect
.
Se si utilizza la macro IMPLEMENT_DYNAMIC o IMPLEMENT_SERIAL nell'implementazione della classe, CObject::Dump
verrà stampato il nome della CObject
classe 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 OutputDebugString
Windows .
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_SERIAL nell'implementazione della classe, l'operatore di inserimento, tramite CObject::Dump
, stamperà il nome della CObject
classe 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