AfxDumpStack
這個全域函式可用來產生目前的堆疊的映像。
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
參數
dwTarget
指出傾印輸出的目標。可能的值,可以使用位元 OR (結合**|**) 運算子,如下:AFX_STACK_DUMP_TARGET_TRACE 將傳送的輸出追蹤巨集。追蹤巨集就會產生輸出中偵錯組建中 ; 它不會產生輸出在發行的組建。此外, 追蹤可以被重新導向至偵錯工具以外的其他目標。
AFX_STACK_DUMP_TARGET_DEFAULT 傳送傾印輸出到預設的目標。輸出到偵錯組建中, 追蹤巨集。在發行的組建輸出到 [剪貼簿]。
AFX_STACK_DUMP_TARGET_CLIPBOARD 將輸出傳送至 [只用剪貼簿。在將資料放在剪貼簿],為使用純文字以 CF_TEXT 的剪貼簿格式。
AFX_STACK_DUMP_TARGET_BOTH 會將輸出到 [剪貼簿] 上,並傳送追蹤巨集],同時。
AFX_STACK_DUMP_TARGET_ODS 將輸出直接傳送至偵錯工具的 Win32 函式 OutputDebugString()。這個選項會產生偵錯工具的輸出,在這兩種偵錯和發行組建,當偵錯工具附加至處理序。AFX_STACK_DUMP_TARGET_ODS (如果它是) 永遠會到達偵錯工具並不能重新導向。
備註
下列範例會反映單一電話所產生的輸出行AfxDumpStack從 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 ===
上述輸出中的每一行,表示最後一個函式呼叫的函式呼叫,並呼叫的函式原型包含的模組的完整路徑名稱的位址。如果在堆疊上的函式呼叫不會發生在函式的確切位址,則會顯示位元組位移。
比方說下, 表將說明上述輸出的第一行:
Output |
描述 |
---|---|
00427D55: |
最後一個函式呼叫的傳回位址。 |
DUMP2\DEBUG\DUMP2.EXE! |
包含函式呼叫的模組完整路徑名稱。 |
void AfxDumpStack(unsigned long) |
呼叫的函式原型。 |
+ 181 bytes |
以位元組為單位的地址的函式原型的位移 (在此情況下, void AfxDumpStack(unsigned long)) 與傳回位址 (這種情況下, 00427D55)。 |
AfxDumpStack適用於偵錯與非偵錯版本的 MFC 程式庫 ; 不過,函式會一律連結以靜態方式,即使是可執行檔使用 MFC 的共用 dll。在實作共用程式庫中,在 MFCS42 中找到函式。LIB 程式庫 (與變種)。
若要順利使用這個函式:
IMAGEHLP 檔案。DLL 必須位於您的路徑。如果您沒有這個 DLL,該函式會顯示錯誤訊息。請參閱影像協助程式庫的函式組合所提供的 IMAGEHLP 資訊。
在堆疊有框架的模組必須包含偵錯資訊。如果它們不包含偵錯資訊,該函式還是會產生堆疊追蹤,,但較不詳細的追蹤。
需求
標頭: afx.h
請參閱
參考
afxDump (CDumpContext 在 MFC 中)