暫存器

偵錯工具引擎可用來檢查和改變目標的暫存器。

目標上可用的暫存器取決於其處理器架構。 如需 x86 處理器暫存器的描述,請參閱 處理器架構。 如需處理器可用暫存器的完整描述,請參閱該處理器的檔。

暫存器集

GetNumberRegisters方法可用來尋找目標上的暫存器數目。

每個暫存器都會由其索引參考。 第一個暫存器索引為零,而最後一個暫存器索引則是暫存器數目減一。 若要尋找已知名稱的暫存器索引,請使用 GetIndexByName

GetDescription方法會傳回暫存器的相關資訊。 這包括暫存器的名稱、它可以保留的數值型別,以及它是否為子註冊。

子登錄是包含在另一個暫存器中的暫存器。 當子登錄變更時,包含它的暫存器也會變更。 例如,在 x86 處理器上, ax 子登錄與 32 位 eax 暫存器低 16 位相同。

有三個特殊暫存器可以使用下列方法找到其值。 這些暫存器值的解譯與平臺相關。

操作暫存器

您可以使用 GetValue方法來讀取暫存器的值。 您可以使用 GetValuesGetValues2來讀取多個暫存器。

您可以使用 SetValue方法將值寫入暫存器。 您可以使用 SetValuesSetValues2來撰寫多個暫存器。

將值寫入暫存器時,如果提供的數值型別與暫存器的類型不同,則值會轉換成暫存器的類型。 此轉換與 CoerceValue方法所執行的相同。 如果暫存器的類型無法保存提供的值,這項轉換可能會導致資料遺失。

Pseudo-Registers

虛擬暫存器 是由保存特定值的偵錯工具引擎所維護的變數,例如, $teb 是虛擬暫存器的名稱,其值為目前線程的執行緒環境區塊位址 (TEB) 。 如需詳細資訊和虛擬暫存器的清單,請參閱 虛擬暫存器語法

每個虛擬暫存器都有索引。 索引是介於零與虛擬暫存器數目之間的數位 - (GetNumberPseudoRegisters) 減一。 若要依名稱尋找虛擬暫存器索引,請使用 GetPseudoIndexByName。 虛擬暫存器的值可以使用GetPseudoValues 讀取,而且可以使用 SetPseudoValues將值寫入虛擬暫存器。 如需虛擬暫存器的描述,包括其類型,請使用 GetPseudoDescription

注意 並非所有虛擬暫存器都可在所有偵錯會話或特定會話的所有時間使用。

顯示暫存器

OutputRegistersOutputRegisters2方法會將目標的暫存器格式化,並將其傳送至用戶端作為輸出。

事件

每當目標暫存器的值變更時,引擎會呼叫 IDebugEventCallbacks::ChangeDebuggeeState 回呼方法,並將 參數 Flags 設定為 DEBUG_CDS_REGISTERS。