Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В области состояния отображаются логические выражения для значений переменных в драйвере, модели операционной системы и правила. SDV использует эти выражения для создания абстракции драйвера, модели операционной системы и правила и их использования в проверке.
На следующем снимке экрана показан пример области состояния в средстве просмотра дефектов.
Область "Состояние " является компонентом средства просмотра дефектов. Если элемент кода выделен на панели "Дерево трассировки", а соответствующая строка исходного кода выделена в области исходного кода, область "Состояние " отображает логические выражения (из набора выражений, отслеживаемых sdV для драйвера), которые оценивают значение TRUE перед выполнением строки кода.
Отслеживание логических выражений
При проверке каждого правила драйвера SDV отслеживает набор логических выражений. Логические выражения, которые отображаются в области состояния, — это те выражения из этого набора, которые оцениваются как TRUE. Если элемент в области "Дерево трассировки " изменяет значение любого выражения, содержимое области состояния изменится, чтобы отобразить новый набор выражений, которые оцениваются как TRUE.
Интерпретация выражений в панели состояния
Большинство выражений, отображаемых в области состояния , связаны с переменными, которые очевидны в коде правила. Исходный код можно использовать для правила (в файле RuleName.slic в области исходного кода ) для интерпретации выражений.
Однако некоторые выражения отображаются в области состояния без каких-либо сведений о их внутреннем представлении, которые могут помочь вам интерпретировать их. Например
x!=x
Для SDV это выражение представляет условие, в котором значение переменной x на этом этапе трассировки не равно значению той же переменной в другой точке трассировки. Используйте исходный код драйвера, код правила (*.slic) и элементы в области дерева трассировки для интерпретации выражений.
Вкладки "Шаг" в области состояния
Логические выражения на панели "Состояние " отображаются на вкладках. Каждая вкладка представляет шаг трассировки через весь исходный код, используемый в проверке. Число на вкладке шага представляет порядок этого шага в трассировке.
Как правило, так как каждая строка исходного кода представляет только один шаг трассировки, на панели "Состояние " будет только одна вкладка шага. Однако сложный код может создавать множество шагов.
Например, на следующем снимке экрана показана область состояния, отображающая строку кода, содержащую указатель функции. В этом случае каждая вкладка шага представляет собой этап в определении адреса, на который указывает указатель, вызов функции, на которую указывает этот адрес, и его результата. (Количество вкладок, отображающих шаги, показывает, сколько шагов требуется для определения указателя функции.)
Чтобы просмотреть каждую вкладку шага на панели состояния, выберите связанную строку кода на панели исходного кода. Затем дважды щелкните строку кода в области исходного кода . Каждый раз, когда вы щелкаете выбранную строку кода, 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