.step_filter (настройка фильтра шагов)
Команда .step_filter создает список функций, пропущенных (перешагнутых) при трассировке. Это позволяет отслеживать код и пропускать только определенные функции. Его также можно использовать в исходном режиме для управления шагами при наличии нескольких вызовов функций в одной строке.
.step_filter "FilterList"
.step_filter /c
.step_filter
Параметры
FilterList
Указывает символы, связанные с функциями, которые необходимо выполнить. FilterList может содержать любое количество текстовых шаблонов, разделенных точкой с запятой. Каждый из этих шаблонов может содержать различные подстановочные знаки и описатели; Дополнительные сведения см. в синтаксисе подстановочных знаков строки. Функция, символ которой соответствует хотя бы одному из этих шаблонов, будет перешагон во время трассировки. Каждый раз при использовании FilterList все предыдущие списки фильтров удаляются и полностью заменяются новым списком.
/c
Очищает список фильтров.
Среда
Позиция | Description |
---|---|
Режимы | Режим пользователя, режим ядра |
Целевые объекты | Динамический, аварийный дампа |
Платформы | Все |
Замечания
Без параметров .step_filter отображает текущий список фильтров.
Как правило, команда трассировки (например, t или отладка windbg | шаг в] трассировки в вызов функции. Однако если символ, связанный с вызываемой функцией, соответствует шаблону, указанному FilterList, функция будет перемещена, как если бы использовалась команда шага (например, p).
Если указатель инструкции находится в коде, указанном в списке фильтров, любые команды трассировки или шага будут выходить из этой функции, например команду gu или кнопку "Шаг выхода WinDbg". Конечно, этот фильтр предотвратит трассировку такого кода в первую очередь, поэтому это произойдет только в том случае, если вы изменили фильтр или попали в точку останова.
Например, следующая команда приведет к пропуску команд трассировки во всех вызовах CRT:
.step_filter "msvcrt!*"
Команда .step_filter наиболее полезна при отладке в исходном режиме, так как в одной исходной строке может быть несколько вызовов функций. Команды p и t нельзя использовать для разделения этих вызовов функций.
Например, в следующей строке команда t будет выполняться как в GetTickCount, так и в printf, а команда p будет выполнять оба вызова функции:
printf( "%x\n", GetTickCount() );
Команда .step_filter позволяет отфильтровать один из этих вызовов при трассировке в другую.
Так как функции идентифицируются по символам, один фильтр может включать весь модуль. Это позволяет отфильтровать функции платформы, например вызовы Microsoft Foundation Classes (MFC) или Active Template Library (ATL).
При отладке в режиме сборки каждый вызов находится в другой строке, поэтому можно выбрать, следует ли выполнять пошаговые или трассировки по строкам. Поэтому .step_filter не очень полезно в режиме сборки.