_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) 以在每个 module!functionname 行前显示 EBP 寄存器和输入堆栈指针 (ESP)。

备注

可从 WinDbg 编程接口调用 _EFN_StackTrace 结构。 请按以下说明使用参数:

  • 如果 wszTextOut 为 Null 而 puiTextLength 不为 Null,则该函数返回 puiTextLength 中的字符串长度。

  • 如果 wszTextOut 不为 Null,则该函数将在 wszTextOut 中存储文本,一直存储到由 puiTextLength 所指示的位置。 如果缓冲区中有足够的空间,则将成功返回;如果该缓冲区不够长,则返回 E_OUTOFMEMORY。

  • 如果 pTransitionContexts 和 puiTransitionContextCount 都为 Null,则忽略函数的转换部分。 在此情况下,函数将向调用方提供只有函数名称的文本输出。

  • 如果 pTransitionContexts 为 Null 而 puiTransitionContextCount 不为 Null,则该函数返回 puiTransitionContextCount 中必需的上下文项的数量。

  • 如果 pTransitionContexts 不为 Null,则该函数将其视作长度为 puiTransitionContextCount 的结构数组。 结构大小由 uiSizeOfContext 给出,并且必须是对应于体系结构的 SimpleContextCONTEXT 的大小。

  • 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
    

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**SOS_Stacktrace.h

**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

请参见

其他资源

调试全局静态函数