Freigeben über


AfxDumpStack

Diese globalen Funktion kann verwendet werden, um ein Bild des aktuellen Stapel zu generieren.

void AFXAPI AfxDumpStack( 
   DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT 
);

Parameter

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

    • AFX_STACK_DUMP_TARGET_TRACE sendet Ausgabe mithilfe des Makros ABLAUFVERFOLGUNG. ABLAUFVERFOLGUNG Das Makro generiert Ausgabe nur in Debugbuilds; es generiert keine Ausgabe in Releasebuilds. Auch ABLAUFVERFOLGUNG kann in anderen Zielen Ausnahme des Debugger umgeleitet werden.

    • AFX_STACK_DUMP_TARGET_DEFAULT sendet den Dump, der z Standardziel ausgegeben wird. Für einen Debugbuild durch Ausgabe dem ABLAUFVERFOLGUNG-Makro. In einem Releasebuild wird Ausgabe in die Zwischenablage.

    • AFX_STACK_DUMP_TARGET_CLIPBOARD sendet Ausgabe nur in die Zwischenablage. Die Daten werden in der Zwischenablage als Klartext mithilfe des CF_TEXT Zwischenablageformats platziert.

    • AFX_STACK_DUMP_TARGET_BOTH sendet Ausgabe die Zwischenablage und dem ABLAUFVERFOLGUNG-Makro, gleichzeitig.

    • AFX_STACK_DUMP_TARGET_ODS sendet Ausgabe direkt zum Debugger mithilfe der Win32-Funktion OutputDebugString(). Diese Option Debugger generiert, die Ausgabe sowohl und Releasebuilds Debuggen, wenn kein Debugger an den Prozess angefügt wird. AFX_STACK_DUMP_TARGET_ODS immer erreicht den Debugger (wenn es verknüpft wird) und kann nicht weitergeleitet werden.

Hinweise

Im Beispiel unten ist spiegelt eine einzelne Zeile der Ausgabe, die im Aufruf von AfxDumpStack von einem Schaltflächenhandler in einer MFC-Dialogfeld-Anwendung generiert wird:

=== 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 im obigen gibt die Adresse des letzten Funktionsaufrufs, des vollständigen Pfadnamens des Moduls, das den Funktionsaufruf enthält, und des aufgerufenen Funktionsprototyps an. Wenn der Funktionsaufruf auf dem Stapel an nicht der exakten Adresse der Funktion wird, wird ein Versatz von Bytes angezeigt.

Zum Beispiel beschreibt die folgenden Tabelle wird die erste Zeile der obigen Ausgabe:

Ausgabe

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 der Adresse des Funktionsprototyps (in diesem Fall, void AfxDumpStack(unsigned long)) an die Rückgabeadresse (in diesem Fall, 00427D55).

AfxDumpStack ist Debug- und nondebug Versionen der MFC-Bibliotheken verfügbar; jedoch wird die Funktion immer statisch verknüpft wird, wenn die ausführbare Datei MFC in einer gemeinsam genutzten DLL verwendet. In den Implementierungen der freigegebenen 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 befinden. Wenn Sie diese DLL wurde, wird die Funktion eine Fehlermeldung an. finden Sie unter Bild-Hilfe-Bibliothek Informationen zum den Funktionssatz, der von IMAGEHLP bereitgestellt wird.

  • Die Module, die Frames auf dem Stapel haben, müssen Debuginformationen enthalten. Wenn sie keine Debuginformationen enthalten, generiert die Funktion noch eine Stapelüberwachung, die Ablaufverfolgung ist weniger detailliert.

Anforderungen

Header: afx.h

Siehe auch

Referenz

afxDump (CDumpContext in MFC)

Konzepte

MFC-Makros, globale Funktionen und globale Variablen