AfxDumpStack

Diese globale Funktion kann verwendet werden, um ein Bild des aktuellen Stapels zu generieren.

void AFXAPI AfxDumpStack(
   DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);

Parameter

  • dwTarget
    Gibt das Ziel der Dump die Ausgabe an.Mögliche Werte, die mithilfe des bitweisen OR kombiniert werden können (**|**Operator) sind wie folgt:

    • AFX_STACK_DUMP_TARGET_TRACE sendet die Ausgabe mithilfe des TRACE Makros.Das TRACE Makro generiert Ausgabe nur in Debugbuilds. Es generiert keine Ausgabe in Releasebuilds.Außerdem kann TRACE zu anderen Zielen mit Ausnahme der Debugger umleiten.

    • AFX_STACK_DUMP_TARGET_DEFAULT sendet die Ausgabe an das Standardziel Dumps.Bei einem Debugbuild geht Ausgabe an den TRACE Makro.In einem Releasebuild geht die Ausgabe in die Zwischenablage.

    • AFX_STACK_DUMP_TARGET_CLIPBOARD sendet die Ausgabe nur in die Zwischenablage.Die Daten werden in die Zwischenablage als Nur-Text mit dem CF_TEXT Zwischenablageformats platziert.

    • AFX_STACK_DUMP_TARGET_BOTH sendet die Ausgabe in die Zwischenablage und das TRACE Makro, gleichzeitig.

    • AFX_STACK_DUMP_TARGET_ODS sendet die Ausgabe direkt an den Debugger mithilfe der Win32-Funktion OutputDebugString().Diese Option wird der Debugger die Ausgabe in beiden und Releasebuilds debuggen, wenn ein Debugger an den Prozess angefügt wird.Der Aufruf erfolgt immer AFX_STACK_DUMP_TARGET_ODS erreicht (wenn der Debugger angefügt ist) und können nicht umgeleitet werden.

Hinweise

Das folgende Beispiel gibt eine einzelne Zeile der Ausgabe, die aus dem Aufruf von AfxDumpStack Schaltflächen aus einem Klassenhandler in einer auf Dialogfeldern generiert wurde:

=== 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 ===

Jede Zeile in der Ausgabe oben gibt die Adresse des letzten Funktionsaufrufs, des vollständigen Pfadnamens des Moduls, das den Funktionsaufruf enthält, und des aufgerufenen Funktionsprototyps angegeben.Wenn der Funktionsaufrufe im Stapel nicht mit der exakten Adresse der Funktion ausgeführt wird, wird ein Offset von Bytes angezeigt.

Zum Beispiel wird die folgende Tabelle die erste Zeile des oben Ausgabe:

Output

Beschreibung

00427D55:

Die Rückgabeadresse des letzten Funktionsaufrufs.

DUMP2\DEBUG\DUMP2.EXE!

Der vollständige Pfadname des Moduls, das den Funktionsaufruf enthält.

void AfxDumpStack(unsigned long)

Der Funktionsprototyp aufgerufen.

+ 181 bytes

Der Offset in Bytes aus der Adresse des Funktionsprototyps (in diesem Fall void AfxDumpStack(unsigned long)) an die Rückgabeadresse (in diesem Fall 00427D55).

AfxDumpStack ist in den Debug- und nondebug Versionen der MFC-Bibliotheken verfügbar. Allerdings wird die Funktion immer statisch verknüpft, auch wenn die ausführbare Datei MFC in einer gemeinsamen genutztem DLL verwendet.In den Implementierungen der gemeinsam genutzten Bibliothek wird die Funktion in der MFCS42.LIB-Bibliothek gefunden (und deren Varianten).

Um diese Funktion erfolgreich verwenden:

  • Die Datei IMAGEHLP.DLL muss auf dem Pfad sein.Wenn Sie keine dieser DLLs haben, zeigt die Funktion eine Fehlermeldung an.Weitere Informationen dazu finden Sie Image-Hilfe-Bibliothek die Gruppe, der von IMAGEHLP bereitgestellt wird.

  • Die Module, die Frames auf dem Stapel haben, müssen Debuginformationen einschließen.Wenn keine Debuginformationen enthalten, generiert die Funktion weiterhin eine Stapelüberwachung, aber die Ablaufverfolgung ist weniger Details.

Anforderungen

Header: afx.h

Siehe auch

Referenz

afxDump (CDumpContext in MFC)

Konzepte

MFC-Makros und -globale Werte