與引擎互動

命令和運算式

偵錯工具引擎 API 提供執行命令和評估運算式的方法,例如輸入 WinDbg 調試 程式命令視窗的方法。 若要執行偵錯工具命令,請使用 Execute。 或者,若要執行檔案中的所有命令,請使用 ExecuteCommandFile

評估方法會使用 C++ 或 MASM 語法來評估運算式。 偵錯工具引擎用來評估運算式的語法,例如在Evaluate方法中,由 GetExpressionSyntax 提供,而且可以使用 SetExpressionSyntaxByNameSetExpressionSyntax來變更。 偵錯工具所辨識的不同語法數目是由 GetNumberExpressionSyntaxes傳回,而其名稱則由 GetExpressionSyntaxNames傳回。

Evaluate所傳回的數值型別取決於所評估字串中使用的符號和常數。 此值包含在DEBUG_VALUE結構中,而且可以使用CoerceValue 和 CoerceValues轉換成不同類型的值。

別名

別名 是在偵錯工具命令和運算式中使用時,會自動取代為其他字元字串的字元字串。 如需別名的概觀,請參閱 使用別名。 偵錯工具引擎有數個別名類別。

固定名稱別名會依數位編制索引,並具有名稱$u 0$u 1、...、$u 9。 您可以使用 SetTextMacro 方法來設定這些別名的值,而且可以使用 GetTextMacro 方法擷取。

自動別名使用者命名別名可以有任何名稱。 自動別名是由偵錯工具引擎所定義,而使用者具名別名是由使用者透過偵錯工具命令或偵錯工具引擎 API 所定義。 若要定義或移除使用者命名的別名,請使用 SetTextReplacement 方法。 GetTextReplacement方法會傳回自動別名或使用者具名別名的名稱和值。 您可以使用 RemoveTextReplacements 方法來移除所有使用者命名別名。 GetNumberTextReplacements方法會傳回使用者名稱和自動別名的數目;這可與GetTextReplacement搭配使用,以逐一查看所有這些別名。 OutputTextReplacements方法會列印所有使用者命名別名的清單,包括其名稱和值。

請注意 ,如果使用者具名別名的名稱與自動別名相同,則使用者命名別名會隱藏自動別名,如此一來,當依名稱擷取別名的值時,將會使用使用者命名別名。

>引擎選項

引擎有許多選項可控制其行為。 這些選項會列在 DEBUG_ENGOPT_XXX中。 GetEngineOptions會傳回它們,而且可以使用SetEngineOptions 進行設定。 您可以使用 AddEngineOptions 設定個別選項,並使用 RemoveEngineOptions取消設定。

中斷

中斷是強制中斷進入偵錯工具的方法,或指示引擎停止處理目前的命令,例如,在 WinDbg 中按 Ctrl+Break。

若要要求中斷偵錯工具,或中斷偵錯工具的目前工作,請使用 SetInterrupt。 若要檢查是否有中斷,請使用 GetInterrupt

注意 從偵錯工具延伸模組執行長時間的工作時,建議延伸模組定期檢查 GetInterrupt ,並在要求中斷時停止處理。

要求中斷偵錯工具時,如果目標執行中斷的時間太長,引擎可能會逾時。 如果目標處於非回應狀態,或資源爭用封鎖或延遲中斷要求,就會發生這種情況。 引擎等候的時間長度是由 GetInterruptTimeout 傳回,而且可以使用 SetInterruptTimeout 來設定。