AfxDumpStack
此全局函数可用于生成当前堆栈的图像。
void AFXAPI AfxDumpStack(
DWORD dwTarget = AFX_STACK_DUMP_TARGET_DEFAULT
);
参数
dwTarget
指示转储输出的目标。 可能的值,可以组合使用按位或 ( |) 运算符,如下所示: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 库的 nondebug 版本;但是,在中,即使您的可执行文件在共享 DLL,使用 MFC 函数静态总是链接。 在共享库实现,函数在 MFCS42.LIB 库 (及其变量) 中找到。
若要成功使用此功能:
文件 IMAGEHLP.DLL 必须在您的路径。 如果没有此 DLL,该函数将显示错误消息。 请参见 图像 help Library 有关函数的信息设置由提供 IMAGEHLP。
在堆栈帧的模块必须包含调试信息。 如果它们不包含调试信息,函数将生成堆栈跟踪,但是,跟踪降低详细的。
要求
Header: afx.h