Поделиться через


Использование отчета о проверке статических драйверов

Отчет SDV — это интерактивное отображение результатов проверки. В этом разделе объясняется, как использовать отчет SDV для обнаружения ошибки кода в драйвере. Подробные сведения об отчете, функциях окон и элементах в окнах см. в разделе Статический отчет о проверке драйверов.

Открытие средства проверки статических дефектов драйвера

Если SDV сообщил о каких-либо "дефектах" (нарушениях правил) в области Результатов , вы можете просмотреть код, связанный с нарушением, в окне "Средство просмотра дефектов " отчета о проверке статических драйверов. В окне Средство просмотра дефектов отображается код в пути к нарушению правила. Для каждого нарушенного правила имеется одно окно средства просмотра дефектов (одновременно можно просмотреть только одно окно средства просмотра дефектов ).

Чтобы открыть окно средства просмотра дефектов для дефекта, выполните следующие действия.

  • Выберите правило из списка в узле Дефекты .

Красный значок круга с белым символом X, представляющим дефект.

Эта процедура работает только для дефектов. SdV не создает окно средства просмотра дефектов , если результаты проверки не являются дефектами, такими как проходы, тайм-ауты, пробелы, неприменимо или любой другой результат без дефектов.

На следующем снимке экрана показана страница отчета о проверке статических драйверов.

Снимок экрана: страница отчета о проверке статических драйверов.

Проверка правила

Прежде чем пытаться найти нарушение правил в коде, ознакомьтесь с правилами, которые нарушил драйвер.

Раздел Правила проверки статических драйверов содержит раздел, в которых объясняется каждое правило, например CancelSpinLock.

Чтобы просмотреть код правила, в области Исходный код отчета о средстве проверки статических драйверов перейдите на вкладку с кодом правила, например CancelSpinLock.slic.

Например, правило CancelSpinLock нарушается, если драйвер вызывает IoAcquireCancelSpinLock или IoReleaseCancelSpinLock не по порядку или если драйвер завершает подпрограмму перед освобождением спин-блокировки.

Трассировка пути дефекта

Когда откроется окно Средство просмотра дефектов , выбирается элемент в области Дерево трассировки , представляющий первый критический вызов драйвера в пути дефекта. В области Исходный код связанная строка исходного кода выделена синим цветом.

На следующем снимке экрана показано открываемое окно средства просмотра дефектов средства проверки статических драйверов с нарушением правила CancelSpinLock Fail_Driver1 примером драйвера. В этом примере первый вызов драйвера в пути к нарушению правила CancelSpinLock является вызовом IoAcquireCancelSpinLock в подпрограмме DispatchSystemControl драйвера.

Снимок экрана: окно просмотра дефектов средства проверки статических драйверов с нарушением правила CancelSpinLock.

Использование области исходного кода

На панели Исходный код отображаются исходные файлы, используемые при проверке. При выборе элемента в области Дерево трассировки файл исходного кода, связанный с элементом, отображается в верхней части стека файлов в соседней области Исходный код . Чтобы просмотреть другой исходный файл, откройте вкладку исходного файла в области Исходный код .

На следующем снимке экрана показана область "Исходный код". В этой области Исходный код строки кода, выделенные бледно-синим цветом, связаны с выбранным элементом в области Дерево трассировки .

Снимок экрана: область исходного кода в средстве просмотра дефектов средства проверки статических драйверов.

Строки в коде драйвера, которые выполняются в пути к дефекту, отображаются красным текстом. Если взглянуть только на строки красного текста, такие как строки 116 и 118 в этом примере, можно иногда увидеть дефект, особенно простой дефект, как в этом примере. В этом случае драйвер получает спин-блокировку, а затем возвращается из подпрограммы диспетчеризации, не отпуская спин-блокировку.

Пошаговое выполнение трассировки

Чтобы начать трассировку, выберите элемент в области Дерево трассировки и нажмите клавишу СТРЕЛКА ВНИЗ. При каждом нажатии клавиши СТРЕЛКА ВНИЗ выбирается следующий элемент в области Дерево трассировки .

При пошаговом просмотре элементов в области Дерево трассировки watch области Исходный код для элементов из кода драйвера. Чтобы развернуть свернутый раздел кода, нажмите клавишу СТРЕЛКА ВПРАВО. Чтобы свернуть развернутый раздел кода, нажмите клавишу СТРЕЛКА ВЛЕВО. Курсор пропускает все свернутые разделы кода.

При прокрутке вниз по элементам в области Дерево трассировки файл исходного кода, в котором создается выбранный элемент, перемещается в верхнюю часть стека файлов на панели Исходный код , и соответствующая строка кода выделяется.

На следующем снимке экрана показано средство просмотра дефектов средства проверки статических драйверов с областями "Дерево трассировки" и "Исходный код".

Снимок экрана: страница отчета о проверке статических драйверов с областями дерева трассировки и исходного кода.

Использование области "Файл правила" и "Состояние"

Область состояния можно использовать для просмотра набора логических выражений, представляющих значения переменных, отслеживаемых SDV во время проверки.

Логические выражения, отображаемые в области Состояние , — это выражения в этом наборе, которые имеют значение TRUE. Если элемент в области Дерево трассировки изменяет значение любого выражения, содержимое области Состояние изменится, чтобы отобразить новый набор выражений, результатом которого является TRUE.

При пошаговом выполнении панели Дерево трассировки можно наблюдать, как SDV использует значения этих переменных для вычисления выражений, используемых в файле правил (*.slic).

На следующем снимке экрана страницы отчета о статической проверке драйверов показано, как тесты SDV показывают, был ли драйвер ранее получена спин-блокировка. SDV проверяет, получил ли драйвер ранее спин-блокировку, т. е. значение переменной s равно 1, то есть заблокировано. В этом случае s!=1 (разблокировано), как показано в области Состояние, поэтому SDV устанавливает значение sравным 1, указывая, что блокировка получена.

Снимок экрана: страница отчета о статической проверке драйверов, на которой показаны тесты SDV для ранее полученной блокировки спина.

Поиск процедуры ABORT

Если код драйвера нарушает правило, панель Дерево трассировки содержит подпрограмму ABORT для сообщения о дефекте.

Если путь кода к дефекту длинный и сложный, часто бывает полезно прокрутить вниз на панели Дерево трассировки , пока не найдете подпрограмму ABORT , а затем с помощью клавиши СТРЕЛКА ВВЕРХ найти код, который сразу же активировал отчет о дефектах.

Например, как показано на следующем снимке экрана, подпрограмма ABORT связана со строкой из файла CancelSpinLock.slic, которая сообщает о дефекте после проверки того, получена ли блокировка (s==locked). Тест является частью подпрограммы, которая выполняется по завершении процедуры отправки. Из этих сведений можно сделать вывод, что драйверу не удалось освободить спин-блокировку перед возвращением из подпрограммы диспетчеризации.

Снимок экрана: страница отчета о проверке статических драйверов, на которой показана подпрограмма ABORT, связанная со строкой из файла CancelSpinLock.slic.

Закрытие средства проверки статических драйверов в средстве проверки дефектов

Определив ошибку кода, которая вызвала дефект, можно закрыть окно средства просмотра дефектов средства проверки статических драйверов для текущего правила, а затем открыть средство просмотра дефектов для другого правила.

Чтобы закрыть средство просмотра дефектов для правила, выполните следующие действия.

  • В меню Файл выберите Выход.

Вы также можете нажать кнопку Закрыть (X) для средства просмотра дефектов. Он находится сразу под кнопкой Закрыть (X) для отчета о проверке статических драйверов.

На следующем снимке экрана показано, как закрыть средство просмотра дефектов.

Снимок экрана: закрытие средства просмотра дефектов для правила в средстве проверки статических драйверов.