共用方式為


_EFN_StackTrace 函式

為 Unmanaged 和 Managed 程式碼之間的每次轉換提供一個 Managed 堆疊追蹤和 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 暫存器和輸入堆疊指標 (Enter Stack Pointer,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 指定,而且必須是架構之 SimpleContextCONTEXT 的大小。

  • wszTextOut 是以下列格式撰寫:

    "<ModuleName>!<Function Name>[+<offset in hex>]
    ...
    (TRANSITION)
    ..."
    
  • 如果十六進位的位移是 0x0,則不會寫入位移。

  • 如果目前在內容的執行緒上沒有 Managed 程式碼,則函式會傳回 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

請參閱

其他資源

偵錯全域靜態函式