AfxDumpStack
Cette fonction d'agrégation peut être utilisée pour générer une image de la pile actuelle.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
Paramètres
dwTarget
Indique la cible de la sortie de vidage. Valeurs possibles, qui peuvent être combinées à l'aide de bits OR ( |) opérateurs, se présentent comme suit :AFX_STACK_DUMP_TARGET_TRACE envoie la sortie au moyen de la macro d'TRACE. La macro de TRACE génère la sortie dans les versions de débogage de build seulement ; il ne génère aucune sortie dans les versions releases. En outre, TRACE peut être redirigé vers les cibles autres que le débogueur.
AFX_STACK_DUMP_TARGET_DEFAULT envoie la sortie de vidage à la cible par défaut. Pour une version de débogage, la sortie passe à la macro TRACE. Dans une version préliminaire, la sortie passe dans le presse-papiers.
AFX_STACK_DUMP_TARGET_CLIPBOARD envoie la sortie dans le presse-papiers uniquement. Les données sont placées dans le presse-papiers sous forme de texte brut à l'aide de CF_TEXT dans le format presse papier.
AFX_STACK_DUMP_TARGET_BOTH envoie la sortie dans le presse-papiers et la macro TRACE, simultanément.
AFX_STACK_DUMP_TARGET_ODS envoie la sortie directement au débogueur au moyen de la fonction **OutputDebugString()**Win32. Cette option génère la sortie du débogueur pour le débogage et les versions releases lorsqu'un débogueur est joint au processus. AFX_STACK_DUMP_TARGET_ODS atteint toujours le débogueur (s'il est associé) et ne peut pas être redirigé.
Notes
L'exemple ci-dessous reflète une ligne de la sortie générée pour avoir appelé AfxDumpStack d'un gestionnaire de bouton dans une application de dialogue de MFC :
=== begin AfxDumpStack output ===
00427D55: DUMP2\DEBUG\DUMP2.EXE! void AfxDumpStack(unsigned long) + 181 bytes
0040160B: DUMP2\DEBUG\DUMP2.EXE! void CDump2Dlg::OnClipboard(void) + 14 bytes
0044F884: DUMP2\DEBUG\DUMP2.EXE! int _AfxDispatchCmdMsg(class CCmdTarget *,
unsigned int,int,void ( CCmdTarget::*)(void),void *,unsigned int,struct AFX_CMDHANDLE
0044FF7B: DUMP2\DEBUG\DUMP2.EXE! virtual int CCmdTarget::OnCmdMsg(unsigned
int,int,void *,struct AFX_CMDHANDLERINFO *) + 626 bytes
00450C71: DUMP2\DEBUG\DUMP2.EXE! virtual int CDialog::OnCmdMsg(unsigned
int,int,void *,struct AFX_CMDHANDLERINFO *) + 36 bytes
00455B27: DUMP2\DEBUG\DUMP2.EXE! virtual int CWnd::OnCommand(unsigned
int,long) + 312 bytes
00454D3D: DUMP2\DEBUG\DUMP2.EXE! virtual int CWnd::OnWndMsg(unsigned
int,unsigned int,long,long *) + 83 bytes
00454CC0: DUMP2\DEBUG\DUMP2.EXE! virtual long CWnd::WindowProc(unsigned
int,unsigned int,long) + 46 bytes
004528D9: DUMP2\DEBUG\DUMP2.EXE! long AfxCallWndProc(class CWnd *,struct
HWND__ *,unsigned int,unsigned int,long) + 237 bytes
00452D34: DUMP2\DEBUG\DUMP2.EXE! long AfxWndProc(struct HWND__ *,unsigned
int,unsigned int,long) + 129 bytes
BFF73663: WINDOWS\SYSTEM\KERNEL32.DLL! ThunkConnect32 + 2148 bytes
BFF928E0: WINDOWS\SYSTEM\KERNEL32.DLL! UTUnRegister + 2492 bytes
=== end AfxDumpStack() output ===
Chaque ligne qui précède de sortie affiche l'adresse du dernier appel de fonction, le chemin d'accès complet du module qui contient l'appel de fonction, et le prototype de la fonction appelée. Si l'appel de fonction dans la pile n'aboutit pas à l'adresse de la fonction, un décalage d'octets est affiché.
Par exemple, le tableau suivant décrit la première ligne de la sortie ci-dessus :
Sortie |
Description |
---|---|
00427D55: |
L'adresse de retour du dernier appel de fonction. |
DUMP2\DEBUG\DUMP2.EXE! |
Le nom ou le chemin d'accès complet au module qui contient la fonction. |
void AfxDumpStack(unsigned long) |
Le prototype de la fonction appelée. |
+ 181 bytes |
Offset en octets de l'adresse de prototype de la fonction (dans ce cas, void AfxDumpStack(unsigned long)) à l'adresse de retour (dans ce cas, 00427D55). |
AfxDumpStack est disponible dans le débogage et les versions de débogage des bibliothèques MFC ; toutefois, la fonction est toujours lié statiquement, même lorsque votre fichier exécutable utilise MFC dans une DLL partagé. Dans les implémentations de bibliothèque partagée, la fonction figure dans la bibliothèque de MFCS42.LIB (et ses variantes).
Pour utiliser cette fonctionnalité avec succès :
Le fichier IMAGEHLP.DLL doit être dans le chemin d'accès. Si vous n'avez pas cette DLL, la fonction renvoie un message d'erreur. Voir le Bibliothèque d'aide d'image pour plus d'informations sur l'ensemble de fonctions fournis par IMAGEHLP.
Les modules dont les cadres de la pile doivent inclure les informations de débogage. S'ils ne contiennent pas les informations de débogage, la fonction génère toujours une trace de la pile, mais la trace est moins détaillée.
Configuration requise
En-tête : afx.h
Voir aussi
Référence
afxDump (CDumpContext dans MFC)