Partager via


CDumpContext, classe

Prend en charge la sortie de diagnostic en fonction du flux dans un format contrôlable de visu.

Syntaxe

class CDumpContext

Membres

Constructeurs publics

Nom Description
CDumpContext ::CDumpContext Construit un objet CDumpContext.

Méthodes publiques

Nom Description
CDumpContext ::D umpAsHex Vide l’élément indiqué au format hexadécimal.
CDumpContext ::Flush Vide toutes les données dans la mémoire tampon du contexte de vidage.
CDumpContext ::GetDepth Obtient un entier correspondant à la profondeur du vidage.
CDumpContext ::HexDump Vide les octets contenus dans un tableau au format hexadécimal.
CDumpContext ::SetDepth Définit la profondeur du vidage.

Opérateurs publics

Nom Description
CDumpContext::operator << Insère des variables et des objets dans le contexte de vidage.

Notes

CDumpContext n’a pas de classe de base.

Vous pouvez utiliser afxDump, un objet prédéclaré CDumpContext , pour la plupart de votre dumping. L’objet afxDump est disponible uniquement dans la version de débogage de la bibliothèque de classes Microsoft Foundation.

Plusieurs des services de diagnostic de mémoire utilisent afxDump pour leur sortie.

Dans l’environnement Windows, la sortie de l’objet prédéfini afxDump , conceptuellement similaire au cerr flux, est routée vers le débogueur via la fonction OutputDebugStringWindows.

La CDumpContext classe a un opérateur d’insertion surchargé ( <<) pour CObject les pointeurs qui vident les données de l’objet. Si vous avez besoin d’un format de vidage personnalisé pour un objet dérivé, remplacez CObject ::D ump. La plupart des classes Microsoft Foundation implémentent une fonction membre substituée Dump .

Les classes qui ne sont pas dérivées de CObject, telles que CString, CTimeet CTimeSpan, ont leurs propres opérateurs d’insertion surchargés CDumpContext , comme les structures souvent utilisées telles que CFileStatus, CPointet CRect.

Si vous utilisez la macro IMPLEMENT_DYNAMIC ou IMPLEMENT_SERIAL dans l’implémentation de votre classe, imprimez CObject::Dump le nom de votre CObjectclasse dérivée. Sinon, il imprimera CObject.

La CDumpContext classe est disponible avec les versions Debug et Release de la bibliothèque, mais la Dump fonction membre est définie uniquement dans la version de débogage. Utilisez #ifdef _DEBUG#endif / instructions pour crocheter votre code de diagnostic, y compris vos fonctions membres personnalisées.Dump

Avant de créer votre propre CDumpContext objet, vous devez créer un CFile objet qui sert de destination de vidage.

Pour plus d’informations sur , consultez Débogage d’applications CDumpContextMFC.

#define _DEBUG

Hiérarchie d'héritage

CDumpContext

Spécifications

En-tête : afx.h

CDumpContext ::CDumpContext

Construit un objet de classe CDumpContext.

CDumpContext(CFile* pFile = NULL);

Paramètres

pFile
Pointeur vers l’objet CFile qui est la destination de vidage.

Notes

L’objet afxDump est construit automatiquement.

N’écrivez pas dans le sous-jacent CFile pendant que le contexte de vidage est actif ; sinon, vous interférerez avec le vidage. Dans l’environnement Windows, la sortie est routée vers le débogueur via la fonction OutputDebugStringWindows.

Exemple

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

Vide le type spécifié mis en forme sous forme de nombres hexadécimaux.

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

Valeur de retour

Référence à un objet CDumpContext.

Notes

Appelez cette fonction membre pour vider l’élément du type spécifié en tant que nombre hexadécimal. Pour vider un tableau, appelez CDumpContext ::HexDump.

Exemple

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

CDumpContext ::Flush

Force l’écriture des données restantes dans les mémoires tampons dans le fichier attaché au contexte de vidage.

void Flush();

Exemple

#if _DEBUG
afxDump.Flush();
#endif

CDumpContext ::GetDepth

Détermine si un vidage profond ou peu profond est en cours.

int GetDepth() const;

Valeur de retour

Profondeur du vidage défini par SetDepth.

Exemple

Consultez l’exemple de SetDepth.

CDumpContext ::HexDump

Vide un tableau d’octets mis en forme sous forme de nombres hexadécimaux.

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

Paramètres

lpszLine
Chaîne à générer au début d’une nouvelle ligne.

pby
Pointeur vers une mémoire tampon contenant les octets à vider.

octets
Nombre d’octets à vider.

nWidth
Nombre maximal d’octets vidés par ligne (et non pas la largeur de la ligne de sortie).

Notes

Pour vider un seul type d’élément spécifique en tant que nombre hexadécimal, appelez CDumpContext ::D umpAsHex.

Exemple

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

CDumpContext::operator <<

Génère les données spécifiées dans le contexte de vidage.

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

Valeur de retour

Référence CDumpContext . À l’aide de la valeur de retour, vous pouvez écrire plusieurs insertions sur une seule ligne de code source.

Notes

L’opérateur d’insertion est surchargé pour CObject les pointeurs ainsi que pour la plupart des types primitifs. Un pointeur vers un caractère entraîne un vidage du contenu de chaîne ; pointeur pour void obtenir un vidage hexadécimal de l’adresse uniquement. Un LONGLONG entraîne un vidage d’un entier signé 64 bits ; Un ULONGLONG entraîne un vidage d’un entier non signé 64 bits.

Si vous utilisez la macro IMPLEMENT_DYNAMIC ou IMPLEMENT_SERIAL dans l’implémentation de votre classe, l’opérateur d’insertion, via CObject::Dump, imprime le nom de votre CObjectclasse dérivée. Sinon, il imprimera CObject. Si vous remplacez la Dump fonction de la classe, vous pouvez fournir une sortie plus significative du contenu de l’objet au lieu d’un vidage hexadécimal.

Exemple

#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

Définit la profondeur du vidage.

void SetDepth(int nNewDepth);

Paramètres

nNewDepth
Nouvelle valeur de profondeur.

Notes

Si vous placez un type primitif ou simple CObject qui ne contient aucun pointeur vers d’autres objets, la valeur 0 est suffisante. Une valeur supérieure à 0 spécifie un vidage profond où tous les objets sont vidés de manière récursive. Par exemple, un vidage profond d’une collection vide tous les éléments de la collection. Vous pouvez utiliser d’autres valeurs de profondeur spécifiques dans vos classes dérivées.

Remarque

Les références circulaires ne sont pas détectées dans les vidages profonds et peuvent entraîner des boucles infinies.

Exemple

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

Voir aussi

Graphique hiérarchique
CFile, classe
CObject, classe