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 通常到达调试器(如果连接了调试器),并且不能被重定向。

说明:
这个全局函数可以被用来生成当前栈的一个映象。下面的例子反映了MFC对话框应用程序中按钮处理函数调用AfxDumpStack所产生的单行调试输出:
=== begin AfxDumpStack output ===
...
BFF928E0: WINDOWS\SYSTEM\KERNERL32.DLL! UTUnRegister + 2492 bytes
=== end AfxDumpStack() output ===
下面的表格描述了上面的输出行:

输出描述
BFF928E0:最近一次函数调用的返回地址
WINDOWS\SYSTEM\KERNEL32.DLL!包含函数调用的模块的完整路径名
UTUnRegister调用的函数原型
+ 2492 bytes以字节为单位的从函数原型地址(这个例子中为UTUnregister)到返回地址(这个例子中为BEF928E0)的偏移
AfxDumpStack在MFC库的调试版本和非调试版本中都可以使用。但是,这个函数通常是静态连接的,即使你的可执行文件以共享DLL的方式使用MFC。
在共享库的实现中,可以在MFCS42.LIB库(以及它的变化形式)中找到这个函数。
为了成功地使用这个函数:
·在你的路径中必须包含IMAGEHLP.DLL文件。如果你没有这个DLL文件,这个函数会显示一条错误信息。IMAGEHLP.DLL是随Win32 SDK和Windows一起发售的可散发的DLL。在C:\[Windows]\system[32]下查找它。有关IMAGEHLP提供的函数集的介绍可以参考“可移植的可执行文件的操作”一文。
·具有栈框架的模块必须包含调试信息。如果它不包含调试信息,这个函数仍然会生成对栈的跟踪,但是这种跟踪是很简略的。

请参阅:afxDump