_EFN_StackTrace 函数
提供托管堆栈跟踪的文本表示形式以及 CONTEXT
记录的数组,其中每项对应非托管代码和托管代码之间的每个转换。
语法
HRESULT CALLBACK _EFN_StackTrace(
[in] PDEBUG_CLIENT Client,
[out] WCHAR wszTextOut[],
[out] size_t *puiTextLength,
[out] LPVOID pTransitionContexts,
[out] size_t *puiTransitionContextCount,
[in] size_t uiSizeOfContext,
[in] DWORD Flags
);
参数
Client
[in]正在调试的客户端。
wszTextOut
[out]堆栈跟踪的文本表示形式。
puiTextLength
[out]指向字符数的 wszTextOut
指针。
pTransitionContexts
[out]转换上下文的数组。
puiTransitionContextCount
[out]指向数组中转换上下文数的指针。
uiSizeOfContext
[in]上下文结构的大小。
Flags
[in]设置为 0 或 SOS_STACKTRACE_SHOWADDRESSES (0x01) 以显示 EBP 寄存器和每 module!functionname
行前面输入堆栈指针 (ESP)。
注解
此 _EFN_StackTrace
结构可通过 WinDbg 程序设计界面调用。 参数用法如下:
如果
wszTextOut
为 null 且puiTextLength
不为 null,则该函数将返回puiTextLength
中的字符串长度。如果
wszTextOut
不为 null,则函数将文本存储在wszTextOut
中,上限取决于puiTextLength
指示的位置。 如果缓冲区中有足够的空间,则它将成功返回,如果缓冲区不够长,则返回 E_OUTOFMEMORY。如果
pTransitionContexts
和puiTransitionContextCount
都为 null,则忽略函数的转换部分。 在这种情况下,函数只向调用方提供函数名的文本输出。如果
pTransitionContexts
为 null 且puiTransitionContextCount
不为 null,则函数返回puiTransitionContextCount
中上下文条目的必需数量。如果
pTransitionContexts
不为 null,则函数会将其视为长度为puiTransitionContextCount
的结构数组。 结构大小由uiSizeOfContext
指定,并且必须是体系结构的 SimpleContext 或CONTEXT
的大小。wszTextOut
采用以下格式编写:"<ModuleName>!<Function Name>[+<offset in hex>] ... (TRANSITION) ..."
如果偏移量(十六进制)为 0x0,则不写入偏移量。
如果在当前上下文中线程上没有托管代码,该函数将返回 SOS_E_NOMANAGEDCODE。
将
Flags
参数设置为 0 或 SOS_STACKTRACE_SHOWADDRESSES,可在每个module!functionname
行前面看到 EBP 和 ESP。 默认情况下是 0。#define SOS_STACKTRACE_SHOWADDRESSES 0x00000001
要求
平台:请参阅系统要求。
标头:SOS_Stacktrace.h
.NET Framework 版本:自 2.0 起可用