Ausführen der Codeanalyse für Treiber
Codeanalyse für Treiber liefert Informationen zu möglichen Fehlern im Quellcode. Sie können die Codeanalyse manuell ausführen, und Sie können codeanalyse auch automatisch mit jedem Build ausführen.
In diesem Thema:
- Ausführen der Codeanalyse
- Anzeigen der Codeanalyseergebnisse
- Unterdrücken des Fehlerberichts
- Ändern von Stapelnutzungsgrenzwerten für Warnungen C6262 für Kernelmodustreiber
- Verwandte Themen
Wichtig
Codeanalyse für Treiber ist in Windows 24H2 WDK und EWDK verfügbar, aber es wird empfohlen, dass sie zu einem zukünftigen Datum eingestellt wird.
In Zukunft wird CodeQL das primäre statische Analysetool für Treiber sein. CodeQL stellt eine leistungsstarke Abfragesprache bereit, die Code als abgefragte Datenbank behandelt, sodass Abfragen für bestimmte Verhaltensweisen, Muster und vieles mehr einfach geschrieben werden können.
Weitere Informationen zur Verwendung von CodeQL finden Sie unter CodeQL und dem Logotest für statische Tools.
Ausführen der Codeanalyse
So führen Sie die Codeanalyse im Treiberquellcode manuell aus
- Wählen Sie in Visual Studio die Treiberprojektdatei oder -lösung und dann die zu analysierende Projektkonfiguration und -plattform aus.
- Klicken Sie im Menü "Analysieren " oder "Erstellen " auf " Codeanalyse für Lösung ausführen".
So führen Sie codeanalyse für Treiberquellcode automatisch mit jedem Build aus
- Klicken Sie in Visual Studio in Projektmappen-Explorer mit der rechten Maustaste auf das Treiberprojekt oder die Projektmappe, und klicken Sie dann auf "Eigenschaften".
- Klicken Sie im Dialogfeld "Eigenschaften" für das Projekt auf "Codeanalyse".
- Wählen Sie auf der Seite "Codeanalyse für C/C++-Eigenschaften " die Projektkonfiguration und -plattform aus, die Sie analysieren möchten (z. B. Windows 8 und Win32).
- Wählen Sie "Codeanalyse für C/C++ im Build aktivieren" aus.
- Wählen Sie unter "Regelsatz" die empfohlenen Regeln für Microsoft-Treiber aus. Dies ist der Standardregelsatz für Treiber.
- Klicken Sie im Menü "Erstellen " auf " Projektmappe erstellen".
Anzeigen der Codeanalyseergebnisse
Wenn mögliche Fehler im Quellcode gefunden werden, zeigt das Fenster "Codeanalyseergebnisse " die Codeanalysewarnnummer und die Zeilennummer in der Quelldatei an, in der der Fehler auftritt.
So zeigen Sie Fehler an
Klicken Sie im Fenster "Ergebnisse der Codeanalyse " auf die Zeilennummer, und eine Beschreibung des Fehlers wird im Fenster "Ergebnisse der Codeanalyse " angezeigt.
Das Codefenster zeigt den Quellcode an und gibt an, wo der Fehler auftritt.
Wenn Sie mehr über eine bestimmte Warnung erfahren möchten, klicken Sie im Fenster "Ergebnisse der Codeanalyse " auf die Warnung.
So zeigen Sie die Codeanalyseprotokolldatei an, die einem Build zugeordnet ist
- Navigieren Sie zu dem Verzeichnis für Ihre Buildkonfiguration und Plattform (z. B
\\Windows7Release\\x64
. ). - Wenn Sie die empfohlenen Regeln verwenden, wird die Protokolldatei aufgerufen
vc.\*codeanalysis.xml
. Wenn Sie einen Treiber für Windows Server 2012 erstellen, wird diese Datei verwendet, um das Treiberüberprüfungsprotokoll zu erstellen.
Unterdrücken des Fehlerberichts
In einigen Fällen sollten Sie den Bericht einer bestimmten Warnmeldung unterdrücken; Wenn die Warnung z. B. in erster Linie informationsmäßig ist und Sie die Ursache des Fehlers kennen.
So unterdrücken Sie Warnmeldungen
Um eine Instanz eines gemeldeten Fehlers zu entfernen, wählen Sie die Zeilennummer und Warnung im Fenster "Ergebnisse der Codeanalyse " aus.
Klicken Sie in der erweiterten Beschreibung der Warnung auf "Aktionen>Unterdrücken der Nachricht>in der Quelle".
Eine Pragma-Warnungsdirektive mit dem Unterdrückungsbezeichner unterdrückt die Warnung nur für die Codezeile, die unmittelbar auf die #pragma Warnungsanweisung folgt.
#pragma warning(suppress: 6014)
Ändern von Stapelnutzungsgrenzwerten für Warnungen C6262 für Kernelmodustreiber
Im Benutzermodus- und Kernelmoduscode ist der Stapelspeicher begrenzt, und ein Commit für eine Stapelseite führt zu einer Stapelüberlaufausnahme. Die Hohe Stapelnutzung ist besonders im Kernelmodus ein Problem, da der gesamt verfügbare Stapelspeicher nur 12 KB beträgt. Kernelmoduscode sollte die Stapelnutzung aggressiv einschränken.
Das Codeanalysetool gibt Warnung C6262 aus, wenn mehr als 1 KB Stapelspeicher lokal in einer Funktion verwendet wird. Wenn Sie Funktionen untersuchen möchten, die möglicherweise ressourcenintensiv sind, können Sie die von C6262 verwendete Stapelschwellengrenze anpassen oder verringern. Wenn Sie den Schwellenwert für den Stapel verringern, kann das Codeanalysetool potenziell weitere Probleme finden. Anschließend können Sie diese Stapelverwendungsprobleme beheben. Sie könnten beispielsweise den Schwellenwert auf 400 Byte senken, um festzustellen, ob andere Funktionen Ressourcen verwenden.
So passen Sie den Stacksize-Grenzwert für C6262 an
- Öffnen Sie die Visual Studio-Projektdatei (.vcxproj) für Den Kernelmodustreiber (oder die Komponente) im Editor oder einem anderen Text-Editor.
- Fügen Sie eine neue ItemDefinitionGroup> für den Compiler< ClCompile> hinzu.<
- Fügen Sie das <PREfastAdditionalOptions-Element> hinzu, und legen Sie die Stacksize-Bytes<> fest. Der Standardwert ist stacksize1024.
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
Speichern Sie die Projektdatei. Starten Sie Visual Studio, laden Sie das aktualisierte Treiberprojekt, und führen Sie codeanalyse aus.
Wenn Sie auf den Standardwert von 1 KB zurücksetzen möchten, können Sie die an der Projektdatei vorgenommenen Änderungen rückgängig machen oder den Stapelgrößeswert in "stacksize1024" ändern.