Partager via


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)

Concepts

macro MFC et Globals