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