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 OutputDebugString
Windows.
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
, CTime
et CTimeSpan
, ont leurs propres opérateurs d’insertion surchargés CDumpContext
, comme les structures souvent utilisées telles que CFileStatus
, CPoint
et 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 CObject
classe 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 CDumpContext
MFC.
#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 OutputDebugString
Windows.
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 CObject
classe 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