_EFN_StackTrace 函式
更新:2007 年 11 月
為 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 指定,而且必須是架構之 SimpleContext 或 CONTEXT 的大小。
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 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0