AfxDumpStack
Cette fonction globale 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 dump.Valeurs possibles, qui peuvent être combinées à l'aide de l'opérateur de bits OR (|) l'opérateur, sont les suivantes :AFX_STACK_DUMP_TARGET_TRACE envoie la sortie au moyen de la macro de TRACE .La macro de TRACE génère la sortie dans les versions debug uniquement ; il ne génère pas de sortie dans les versions release.En outre, TRACE peut être redirigée vers d'autres cibles en plus de le débogueur.
AFX_STACK_DUMP_TARGET_DEFAULT envoie la sortie de dump à la cible par défaut.Pour une version debug, la sortie accède à TRACE la macro.Dans une version release, la sortie est redirigé vers le presse-papiers.
AFX_STACK_DUMP_TARGET_CLIPBOARD envoie la sortie vers le presse-papiers uniquement.Les données est placée dans le presse-papiers en texte brut à l'aide de le format de presse-papiers du CF_TEXT .
AFX_STACK_DUMP_TARGET_BOTH envoie la sortie vers le presse-papiers et à la macro de 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 dans les versions debug et release lorsqu'un débogueur est attaché au processus.AFX_STACK_DUMP_TARGET_ODS toujours atteint le débogueur (s'il est attaché) et ne peut pas être redirigé.
Notes
L'exemple ci-dessous reflète une ligne unique de la sortie générée d'appeler AfxDumpStack d'un gestionnaire de bouton dans une application de dialogue 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 de la sortie ci-dessus indique l'adresse du dernier appel de fonction, du chemin d'accès complet du module qui contient l'appel de fonction, et du prototype de la fonction appelée.Si un appel de fonction dans la pile ne se produit pas à l'adresse exacte de la fonction, un offset 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 chemin d'accès complet du module qui contient l'appel de fonction. |
void AfxDumpStack(unsigned long) |
Le prototype de fonction appelée. |
+ 181 bytes |
L'offset en octets de l'adresse du prototype de fonction (dans ce cas, void AfxDumpStack(unsigned long)) à l'adresse de retour (dans ce cas, 00427D55). |
AfxDumpStack est disponible dans les versions debug et sans débogage des bibliothèques MFC ; toutefois, la fonction est toujours liée de manière statique, même lorsque votre fichier exécutable utilise MFC dans une DLL partagées.Dans les implémentations de partager-bibliothèque, la fonction est trouvée dans la bibliothèque de MFCS42.LIB (et ses variantes).
Pour utiliser cette fonction avec succès :
Le fichier IMAGEHLP.DLL doit se trouver sur votre chemin d'accès.Si vous n'avez pas cette DLL, la fonction affichera un message d'erreur.Consultez bibliothèque d'aide d'image pour plus d'informations sur l'ensemble de fonction fourni par IMAGEHLP.
Les modules qui ont des frames sur la pile doivent inclure des informations de débogage.S'ils ne contiennent pas d'informations de débogage, la fonction génère toujours une trace de la pile, mais la trace sera moins détaillées.
Configuration requise
Header: afx.h
Voir aussi
Référence
afxDump (CDumpContext dans MFC)