AfxDumpStack

此全局函数来生成当前堆栈的图像。

void AFXAPI AfxDumpStack( 
   DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT 
);

参数

  • dwTarget
    指示转储输出的目标。 可能值,可以将使用按位或 ( |) 运算符,如下所示:

    • AFX_STACK_DUMP_TARGET_TRACE 通过 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 库的 nondebug 版本;但是,即使当可执行文件,在共享 DLL,使用 MFC 静态函数始终链接。 在共享库实现,函数位于 MF CS42 (.lib 库及其变量) 中。

成功使用此函数:

  • 文件 IMAGEHLP.DLL 必须位于 PATH。 如果没有此 DLL,函数将显示错误消息。 参见 Help Library 图像 IMAGEHLP 有关提供的函数集的信息。

  • 在堆栈上框架的模块必须包括调试信息。 如果它们不包含调试信息,函数将生成堆栈跟踪,但是跟踪,将有所简化。

要求

页眉: afx.h

请参见

参考

afxDump(MFC 中的 CDumpContext)

概念

MFC 宏和全局函数