_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。

  • 如果 pTransitionContextspuiTransitionContextCount 都为 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  
    

要求

平台:请参阅系统要求

标头:SOS_Stacktrace.h

.NET Framework 版本:自 2.0 起可用

请参阅