Область состояния
В области Состояние отображаются логические выражения для значений переменных в драйвере, модели операционной системы и правиле. SDV использует эти выражения для создания абстракции драйвера, модели операционной системы и правила и использует их при проверке.
На следующем снимке экрана показан пример области Состояние в средстве просмотра дефектов.
Панель Состояние является компонентом средства просмотра дефектов. Если элемент кода выделен в области Дерево трассировки, а соответствующая строка исходного кода выделена в области Исходный код, в области Состояние отображаются логические выражения (из набора выражений, отслеживаемых SDV для драйвера), которые оцениваются как TRUE перед выполнением строки кода.
Отслеживание логических выражений
При проверке каждого правила для драйвера SDV отслеживает набор логических выражений. Логические выражения, отображаемые в области Состояние , — это выражения в этом наборе, которые имеют значение TRUE. Если элемент в области Дерево трассировки изменяет значение любого выражения, содержимое области Состояние изменится, чтобы отобразить новый набор выражений, результатом которого является TRUE.
Интерпретация выражений в области состояния
Большинство выражений, отображаемых на панели Состояние , связаны с переменными, которые очевидны в коде правила. Для интерпретации выражений можно использовать исходный код правила (в файле RuleName.slic на панели исходный код ).
Однако некоторые выражения отображаются на панели Состояние без каких-либо сведений об их внутреннем представлении, которые могут помочь вам интерпретировать их. Например,
x!=x
Для SDV это выражение представляет условие, при котором значение переменной x на данном этапе трассировки не равно значению той же переменной в другой точке трассировки. Используйте исходный код драйвера, код правила (*.slic) и элементы в области Дерево трассировки , чтобы помочь вам интерпретировать выражения.
Вкладки шагов в области состояния
Логические выражения в области Состояние отображаются на вкладках. Каждая вкладка представляет собой шаг трассировки по всему исходному коду, используемому при проверке. Число на вкладке шага представляет порядок этого шага в трассировке.
Как правило, так как каждая строка исходного кода представляет только один шаг трассировки, в области Состояние будет только одна вкладка шага. Однако сложный код может создавать множество шагов.
Например, на следующем снимке экрана показана панель Состояние со строкой кода, включающей указатель функции. В этом случае каждая вкладка шага представляет собой шаг в разрешении указателя, вызов функции point-to и ее результат. (Количество вкладок шагов показывает, сколько шагов требуется sdv для разрешения указателя функции.)
Чтобы просмотреть вкладку каждого шага в области Состояние по порядку, выберите связанную строку кода в области Исходный код . Затем несколько раз щелкните строку кода в области Исходный код . Каждый раз, когда вы щелкаете выбранную строку кода, SDV отображает вкладку следующего шага, пока вы не перейдете по всем вкладкам шагов. Изогнутая желтая стрелка указывает выбранный шаг.
Вы также можете щелкнуть любую вкладку в области Состояние , чтобы просмотреть ее содержимое.
Комментарий
SDV часто отслеживает выражения в области Состояние , которые не отображаются в правиле и не связаны напрямую с правилом. Эти выражения возникают в результате сложной эвристики, которую SDV использует в своих попытках сопоставить различные значения и различные нарушения правил. В некоторых ситуациях SDV не может правильно вычислить выражение. В таких случаях SDV предоставляет сообщение о том, что текущее состояние неизвестно, и отображает выражение из шага с последним известным состоянием. См. следующий пример кода для объяснения:
Unknown state. Last known state from step 120.
sdv irql current ==2
sdv irql current!=1
sdv irql current!=0