Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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