共用方式為


結構 UNWIND_INFO

回溯資料資訊結構是用來在堆疊指標上記錄函式的效果,也是靜態暫存器在堆疊上儲存的位置:

UBYTE: 3

版本

UBYTE: 5

旗標

UBYTE

初構的大小

UBYTE

回溯程式碼的數目

UBYTE: 4

框架暫存器

UBYTE: 4

框架暫存器位移 (已調整)

USHORT * n

回溯程式碼陣列

variable

可以為以下的形式 (1) 或 (2)

(1) 例外處理常式

ULONG

例外狀況處理常式的位址

variable

語言特定處理常式資料 (選擇性)

(2) 鏈結的回溯資訊

ULONG

函式開始位址

ULONG

函式結束位址

ULONG

回溯資訊位址

UNWIND_INFO 結構在記憶體中必須對齊 DWORD。 每個欄位的意義如下:

  • 版本
    回溯資料的版本號碼,目前為 1。

  • 旗標
    目前定義了三個旗標:

    UNW_FLAG_EHANDLER 函式不應該呼叫,以尋找函式時必須檢查例外狀況的例外處理常式。

    UNW_FLAG_UHANDLER 函式不應該呼叫,在回溯例外狀況時的終止處理常式。

    這個回溯資訊結構的 UNW_FLAG_CHAININFO 不是主要的程序的。 相反地,鏈結的回溯資訊項目是前一個 RUNTIME_FUNCTION 項目的內容。 請參閱下列說明文字,了解鏈結的回溯資訊結構。 如果設定這個旗標,則 UNW_FLAG_EHANDLER 和 UNW_FLAG_UHANDLER 旗標必須清除。 此外,框架暫存器和固定的堆疊配置欄位,必須具有和主要回溯資訊相同的值。

  • 初構的大小
    函式初構的長度,以位元組為單位。

  • 回溯程式碼的數目
    這是回溯程式碼陣列中位置的數目。 請注意某些回溯程式碼 (例如 UWOP_SAVE_NONVOL) 會需要陣列中一個以上的位置。

  • 框架暫存器
    如果不為零,則函式會使用框架指標,而這個欄位則是做為框架指標之靜態暫存器的數目,並使用和 UNWIND_CODE 節點的作業資訊欄位相同的編碼方式。

  • 框架暫存器位移 (已調整)
    如果框架暫存器欄位不為零,則這是在 FP 暫存器建立時套用至 FP 暫存器之已調整的 RSP 位移。 真正的 FP 暫存器會設定為 RSP + 16 * 這個數字,允許從 0 到 240 的位移。 這可以將 FP 暫存器指向區域堆疊配置的中間以提供動態堆疊框架,經由較短的指令達成較佳的程式碼密度 (較多指令可以使用 8 位元有號位移的形式)。

  • 回溯程式碼陣列
    這是項目的陣列,其中的項目會說明初構對靜態暫存器和 RSP 的作用。 如需個別項目的意義,請參閱 UNWIND_CODE 章節。 基於對齊的目的,這個陣列永遠會有偶數個項目,而最後項目可能不使用 (此種情況下,陣列的元素會比回溯程式碼數目欄位所表示的還要多一個)。

  • 例外狀況處理常式的位址
    這是相對於影像的指標,指向函式的語言特定例外狀況/終止處理常式 (如果旗標 UNW_FLAG_CHAININFO 已清除且 UNW_FLAG_EHANDLER 或 UNW_FLAG_UHANDLER 旗標已設定)。

  • 語言特定處理常式資料
    這是函式的語言特定例外狀況處理常式資料。 這個資料的格式是未指定的,而且完全由使用的特定例外狀況處理常式來決定。

  • 鏈結的回溯資訊
    如果旗標 UNW_FLAG_CHAININFO 已設定,則 UNWIND_INFO 結構會以三個 UWORD 結束。 這些 UWORD 表示鏈結之回溯的函式之 RUNTIME_FUNCTION 資訊。

請參閱

參考

回溯資料以進行例外狀況處理與偵錯工具支援