提供托管堆栈跟踪的文本表示形式以及 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 起可用