事件篩選

事件篩選 條件提供簡單的事件篩選;它們會影響偵錯工具引擎在目標中發生事件之後的繼續方式。 事件發生時,引擎會判斷該事件是否符合事件篩選準則。 如果是,事件篩選準則的中斷狀態會影響偵錯工具是否會中斷目標。 如果事件是例外狀況事件,處理狀態會判斷是否應該在目標中視為已處理或未處理例外狀況。

注意 如果需要更複雜的事件篩選,可以使用事件回呼。

事件篩選準則分成三個類別。

  1. 特定事件篩選條件。 這些是所有非例外狀況事件的篩選。 如需這些事件的清單 ,請參閱DEBUG_FILTER_XXX

  2. 特定的例外狀況篩選條件。 第一個特定的例外狀況篩選準則是 預設例外狀況篩選準則。 其餘是引擎具有內建篩選準則之例外狀況的篩選準則。 如需特定例外狀況篩選的清單,請參閱特定 例外 狀況。

  3. 任意例外狀況篩選條件。 這些是已手動新增之例外狀況事件的篩選。

類別 1 和 2 中的篩選統稱為 特定篩選,而類別 2 和 3 中的篩選則統稱為 例外狀況篩選條件。 GetNumberEventFilters會傳回每個類別中的篩選數目。

如果事件的類型與篩選的類型相同,事件就會符合特定事件篩選準則。 某些事件篩選準則有額外的參數,進一步限制它們相符的事件。

如果例外狀況事件的例外狀況代碼與例外狀況篩選準則的例外狀況程式碼相同,則例外狀況事件會比對例外狀況篩選準則。 如果沒有與例外狀況事件相同的例外狀況程式碼例外狀況篩選準則,則預設例外狀況篩選會處理例外狀況事件。

命令和參數

事件篩選準則可以有與其相關聯的偵錯工具命令。 當發生符合篩選準則的事件時,引擎會執行此命令。 GetEventFilterCommandSetEventFilterCommand 可用來取得和設定此命令。 針對例外狀況篩選準則,此命令會在例外狀況的第一個機率上執行。 您可以在第二次機率例外狀況事件上執行個別的第二個機率命令。 若要取得並設定第二個機率命令,請使用 GetExceptionFilterSecondCommandSetExceptionSecondChanceCommand

GetSpecificFilterParametersGetExceptionFilterParameters會傳回特定事件篩選準則和例外狀況篩選的參數。 您可以使用 SetSpecificFilterParametersSetExceptionFilterParameters來設定事件篩選準則的中斷狀態和處理狀態。

SetExceptionFilterParameters 也可以用來新增和移除任意例外狀況篩選。

GetEventFilterText會傳回特定篩選的簡短描述。

某些特定篩選會採用引數來限制篩選準則相符的事件。 GetSpecificFilterArgumentSetSpecificFilterArgument 將會取得和設定支援引數的特定篩選引數。 如果特定篩選沒有引數,則不會限制其相符的事件。 下表列出採用引數的事件篩選準則,以及它們如何限制符合的事件:

事件 比對準則

建立程式

所建立進程的名稱必須符合 argument.1

結束程式

結束進程的名稱必須符合 argument.1

載入模組

載入的模組名稱必須符合 argument.1

卸載模組

卸載模組的基底位址必須與 argument.2 相同

目標輸出

來自目標的偵錯輸出必須符合 argument.3

注意  

  1. 引數會使用 字串萬用字元語法 ,並與影像名稱進行比較, (在事件發生時忽略路徑) 。 如果模組或進程的名稱無法使用,則會將其視為相符專案。

  2. 引數是在設定引數時由引擎評估的運算式。

  3. 引數會使用字串萬用字元語法,並與目標的偵錯輸出進行比較。 如果不知道輸出,則會將其視為相符專案。

索引和例外狀況程式碼

每個事件篩選都有索引。 索引是介於零到小於內含) (篩選總數之間的數位。 您可以從GetNumberEventFilters傳回的SpecificEventsSpecificExceptionsArbitraryExceptions值中找到每個篩選類別的索引範圍,如下表所述:

事件篩選 第一個篩選準則的索引 篩選數目

特定事件篩選

0

SpecificEvents

特定例外狀況篩選

SpecificEvents

SpecificExceptions

任意例外狀況篩選

SpecificEvents + SpecificExceptions

ArbitraryExceptions

特定事件篩選準則的索引位於主題 DEBUG_FILTER_XXX的第一個資料表中。 預設例外狀況篩選準則的索引 (第一個特定例外狀況篩選準則) 為 SpecificEvents。 移除任意例外狀況篩選準則時,其他任意例外狀況篩選的索引可能會變更。

例外狀況篩選通常由例外狀況程式碼指定。 不過,某些方法需要例外狀況的索引。 若要尋找指定例外狀況的例外狀況篩選索引,請使用 GetExceptionFilterParameters 逐一查看所有例外狀況篩選,直到您找到例外狀況程式碼與例外狀況相同的例外狀況程式碼為止。 您可以在特定例外狀況主題中找到特定例外狀況篩選 的例外狀況代碼。

系統錯誤

發生系統錯誤時,如果錯誤發生在或低於指定的層級,引擎將會中斷至偵錯工具,或將錯誤列印至輸出資料流程。 這些層級是由 GetSystemErrorControl 傳回,而且可以使用 SetSystemErrorControl來變更。