.step_filter (设定步骤筛选)

.step_filter命令會建立追蹤時略過 (略過) 函式清單。 這可讓您追蹤程序代碼,並只略過某些函式。 它也可以在來源模式中使用,以控制在一行上有多個函式呼叫時逐步執行。

.step_filter "FilterList" 
.step_filter /c 
.step_filter 

參數

FilterList
指定要逐步執行之函式相關聯的符號。 FilterList 可以包含任意數目的文字模式,以分號分隔。 這些模式的每一個都可能包含各種通配符和規範;如需詳細資訊 ,請參閱字串通配符語法 。 符號符合下列其中一個模式的函式,會在追蹤期間逐步執行。 每次使用 FilterList 時,都會捨棄任何先前的篩選條件清單,並以新的清單完全取代。

/C
清除篩選清單。

環境

項目 描述
模式 使用者模式、核心模式
目標 即時、損毀傾印
平台 全部

備註

如果沒有任何參數, .step_filter 會顯示目前的篩選清單。

般而言,追蹤 命令 (t 或windbg 偵錯 | 逐步執行] 追蹤函式調用。 不過,如果與所呼叫函式相關聯的符號符合 FilterList 所指定的模式,則函式會逐步解說,就像使用 p) 之類的步驟命令 (一樣。

如果指令指標位於篩選清單中所列的程式代碼內,任何追蹤或步驟命令都會跳出此函式,例如 gu 命令或 WinDbg 跳出 按鈕。 當然,此篩選會防止這類程序代碼在第一個位置追蹤,因此只有在您變更篩選或叫用斷點時,才會發生此情況。

例如,下列命令會導致追蹤命令略過所有 CRT 呼叫:

.step_filter "msvcrt!*" 

當您在來源模式中偵錯時, .step_filter 命令最有用,因為單一來源行上可能會有多個函式呼叫。 pt 命令無法用來分隔這些函數調用。

例如,在下列這一行中, t 命令會逐步執行 GetTickCount 和 printf,而 p 命令會逐步執行這兩個函式呼叫:

printf( "%x\n", GetTickCount() );

.step_filter 命令可讓您篩選掉其中一個呼叫,同時仍追蹤到另一個呼叫。

因為函式是以符號識別,所以單一篩選可以包含整個模組。 這可讓您篩選掉架構函式,例如 Microsoft Foundation Classs (MFC) 或 Active Template Library (ATL) 呼叫。

在元件模式中偵錯時,每個呼叫都位於不同的行上,因此您可以選擇要逐行執行或追蹤行。 因此 ,.step_filter 在元件模式中並不非常實用。