Zustandsbereich
Im Bereich Zustand werden boolesche Ausdrücke für die Werte von Variablen im Treiber, im Betriebssystemmodell und in der Regel angezeigt. SDV verwendet diese Ausdrücke, um eine Abstraktion des Treibers, des Betriebssystemmodells und der Regel zu erstellen und sie in der Überprüfung zu verwenden.
Der folgende Screenshot zeigt einen Beispielbereich Zustand in der Fehleranzeige.
Der Bereich Zustand ist eine Komponente der Fehleranzeige. Wenn ein Codeelement im Bereich Ablaufverfolgungsstruktur hervorgehoben ist und die entsprechende Zeile des Quellcodes im Bereich Quellcode hervorgehoben ist, werden im Bereich Zustand die booleschen Ausdrücke (aus dem Satz von Ausdrücken angezeigt, die SDV für den Treiber nachverfolgt), die vor der Ausführung der Codezeile auf TRUE ausgewertet werden.
Nachverfolgen boolescher Ausdrücke
Beim Überprüfen jeder Regel für den Treiber verfolgt SDV eine Reihe boolescher Ausdrücke nach. Die booleschen Ausdrücke, die im Bereich Zustand angezeigt werden, sind die Ausdrücke in diesem Satz, die auf TRUE ausgewertet werden. Wenn das Element im Bereich Ablaufverfolgungsstruktur den Wert eines beliebigen Ausdrucks ändert, ändert sich der Inhalt des Bereichs Zustand , um den neuen Satz von Ausdrücken anzuzeigen, der in TRUE ausgewertet wird.
Interpretieren von Ausdrücken im Zustandsbereich
Die meisten Ausdrücke, die im Bereich Zustand angezeigt werden, beziehen sich auf Variablen, die im Regelcode offensichtlich sind. Sie können quellcode für die Regel (in der Datei RuleName.slic im Bereich Quellcode ) verwenden, um die Ausdrücke zu interpretieren.
Einige Ausdrücke werden jedoch im Bereich Zustand ohne Details zu ihrer internen Darstellung angezeigt, die Ihnen bei der Interpretation helfen können. Beispiel:
x!=x
Für SDV stellt dieser Ausdruck eine Bedingung dar, bei der der Wert der Variablen x an diesem Punkt in der Ablaufverfolgung nicht gleich dem Wert derselben Variablen an einem anderen Punkt in der Ablaufverfolgung ist. Verwenden Sie den Treiberquellcode, den Regelcode (*.slic) und die Elemente im Bereich Ablaufverfolgungsstruktur , um die Ausdrücke zu interpretieren.
Schrittregisterkarten im Statusbereich
Die booleschen Ausdrücke im Bereich Status werden auf Registerkarten angezeigt. Jede Registerkarte stellt einen Schritt in der Ablaufverfolgung durch den gesamten Quellcode dar, der bei der Überprüfung verwendet wird. Die Zahl auf der Schrittregisterkarte stellt die Reihenfolge dieses Schritts in der Ablaufverfolgung dar.
Da jede Zeile des Quellcodes nur einen Schritt in der Ablaufverfolgung darstellt, gibt es im Bereich Zustand in der Regel nur eine Schrittregisterkarte. Komplexer Code kann jedoch viele Schritte generieren.
Der folgende Screenshot zeigt beispielsweise den Statusbereich mit einer Codezeile, die einen Funktionszeiger enthält. In diesem Fall stellt jede Schrittregisterkarte einen Schritt in der Auflösung des Zeigers, den Aufruf der Point-to-Funktion und deren Ergebnis dar. (Die Anzahl der Schrittregisterkarten gibt an, wie viele Schritte erforderlich sind, damit SDV den Funktionszeiger auflösen kann.)
Um jede Schrittregisterkarte im Bereich Zustand in der richtigen Reihenfolge anzuzeigen, wählen Sie die zugeordnete Codezeile im Bereich Quellcode aus. Klicken Sie dann wiederholt auf die Codezeile im Bereich Quellcode . Jedes Mal, wenn Sie auf die ausgewählte Codezeile klicken, zeigt SDV die Registerkarte "Nächster Schritt" an, bis Sie alle Schrittregisterkarten durchlaufen haben. Der gekrümmte gelbe Pfeil zeigt den ausgewählten Schritt an.
Sie können auch auf eine beliebige Registerkarte im Bereich Status klicken, um den Inhalt anzuzeigen.
Kommentar
SDV verfolgt häufig Ausdrücke im Bereich Zustand nach, die nicht in der Regel angezeigt werden und nicht direkt mit der Regel zusammenhängen. Diese Ausdrücke resultieren aus ausgefeilten Heuristiken, die SDV verwendet, um unterschiedliche Werte und unterschiedliche Regelverletzungen zu korrelieren. In einigen Situationen kann SDV den Ausdruck nicht ordnungsgemäß auswerten. In diesen Fällen stellt SDV eine Meldung bereit, die besagt, dass der aktuelle Zustand unbekannt ist, und zeigt den Ausdruck aus dem Schritt mit dem letzten bekannten Status an. Eine Erklärung finden Sie im folgenden Codebeispiel:
Unknown state. Last known state from step 120.
sdv irql current ==2
sdv irql current!=1
sdv irql current!=0