共用方式為


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

請參閱

參考

afxDump (MFC 中的 CDumpContext)

概念

MFC 巨集和全域