AfxDumpStack
Globální funkce lze použít k vytvoření bitové kopie aktuálního zásobníku.
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
Parametry
dwTarget
Označuje cílový výstup dump.Možné hodnoty, které lze kombinovat pomocí (bitový operátor OR**|**) operátor, jsou následující:AFX_STACK_DUMP_TARGET_TRACE odešle prostřednictvím výstup trasování makro.TRACE makro generuje výstup v sestavení ladění; ve verzi sestavení vygeneruje žádný výstup.Také TRACE lze přesměrovat na jiné cíle kromě ladicí program.
AFX_STACK_DUMP_TARGET_DEFAULT odešle výpis výchozí cíl výstupu.Pro nové sestavení ladicí výstup přejde TRACE makro.Ve verzi sestavení výstup přejde do schránky.
AFX_STACK_DUMP_TARGET_CLIPBOARD odešle výstup pouze do schránky.Data se umístí do schránky jako prostý text pomocí CF_TEXT formát schránky.
AFX_STACK_DUMP_TARGET_BOTH odešle výstup do schránky a na TRACE makra současně.
AFX_STACK_DUMP_TARGET_ODS z funkce Win32 odešle výstup přímo do ladicího programu OutputDebugString().Tato možnost bude generovat ladicí výstup v obou ladění a uvolnění sestavení při procesu je připojen ladicí program.AFX_STACK_DUMP_TARGET_ODS vždy dosáhne debugger (Pokud je připojena) a nemůže být přesměrovány.
Poznámky
Následující příklad odpovídá jeden řádek výstup generovaný z volací AfxDumpStack ze zpracování tlačítka v dialogovém okně aplikace 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 ===
Každý řádek výše výstup označuje adresu poslední volání funkce, název modulu obsahujícího volání funkce a funkce prototypu, nazývané úplnou cestu.Pokud volání funkce v zásobníku na přesnou adresu funkce nestane, je zobrazen posun bajtů.
Například následující tabulka popisuje první řádek nad výstupu:
Výsledek |
Description |
---|---|
00427D55: |
Zpáteční adresu poslední volání funkce. |
DUMP2\DEBUG\DUMP2.EXE! |
Úplná cesta název modulu obsahujícího volání funkce. |
void AfxDumpStack(unsigned long) |
Prototyp funkce nazývá. |
+ 181 bytes |
Offset v bajtech z adresy funkce prototypu (v tomto případě void AfxDumpStack(unsigned long)) na zpáteční adresu (v případě 00427D55). |
AfxDumpStackje k dispozici v ladění a nondebug verze knihovny MFC; však funkce je vždy spojen staticky, i když používá spustitelný soubor MFC sdílené knihovny DLL.V implementaci knihovny sdílené funkce naleznete v MFCS42.LIB knihovny (a jeho varianty).
Použití této funkce úspěšně:
Soubor IMAGEHLP.Knihovna DLL musí být na cestě.Pokud není tato knihovna DLL, funkce se zobrazí chybová zpráva.Viz Nápověda knihovny obrázků informace o sadě funkce poskytované IMAGEHLP.
Moduly, které mají snímky v zásobníku musí zahrnovat informace o ladění.Pokud neobsahují informace o ladění, funkce bude generovat stále trasování zásobníku, ale bude méně podrobné sledování.
Požadavky
Záhlaví: afx.h