AfxDumpStack
這個全域函式可以產生目前堆疊上的影像。
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
參數
dwTarget
表示傾印輸出的目標。 可能的值,可以結合使用位元 OR ( |) 運算子,如下所示:AFX_STACK_DUMP_TARGET_TRACE 透過 追蹤 巨集傳送輸出。 TRACE 巨集產生的輸出僅偵錯組建;它不會在發行的組建輸出。 此外, TRACE 可以重新導向至偵錯工具以外的其他目標。
AFX_STACK_DUMP_TARGET_DEFAULT 傳送傾印輸出到預設目標。 針對偵錯組建,輸出去 TRACE 巨集。 在發行的組建中,要輸出至剪貼簿。
AFX_STACK_DUMP_TARGET_CLIPBOARD 將輸出傳送至只剪貼簿。 使用 CF_TEXT 剪貼簿格式,將資料保留在剪貼簿上放置為純文字。
AFX_STACK_DUMP_TARGET_BOTH 傳送輸出至剪貼簿和對 TRACE 巨集,同時。
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 程式庫的非偵錯版本;不過,,即使您的可執行檔在共用 DLL,使用 MFC 函式靜態永遠連接。 在共用程式庫實作函式,在 MFCS42.LIB 程式庫 (及其變數) 中找到。
已成功使用函式:
檔案 IMAGEHLP.DLL 必須在路徑中。 如果您沒有這個 DLL,函式會顯示錯誤訊息。 請參閱 影像 Help Library 。如需 IMAGEHLP 提供的函式集的資訊。
在堆疊框架的模組必須包含偵錯資訊。 如果不包含偵錯資訊,函式會產生堆疊追蹤,不過,追蹤將較不詳細的。
需求
Header: afx.h