Schnellstart: Codeanalyse für C/C++

Sie können die Qualität Ihrer Anwendung verbessern, indem Codeanalysen für C oder C++-Code regelmäßig ausgeführt werden. Die Codeanalyse kann Ihnen dabei helfen, häufige Probleme und Verstöße gegen bewährte Programmierpraxis zu finden. Und es findet Fehler, die durch Tests schwer zu erkennen sind. Die Warnungen unterscheiden sich von Compilerfehlern und Warnungen: Sie sucht nach bestimmten Codemustern, die bekanntermaßen Probleme verursachen. Das heißt, Code, der gültig ist, aber dennoch Probleme für Sie oder für andere Personen erstellen kann, die Ihren Code verwenden.

Konfigurieren von Regelsätzen für ein Projekt

  1. Öffnen Sie in Projektmappen-Explorer das Kontextmenü für den Projektnamen, und wählen Sie dann "Eigenschaften" aus.

  2. Wählen Sie optional in den Listen "Konfiguration und Plattform" die Buildkonfiguration und die Zielplattform aus.

  3. Aktivieren Sie das Kontrollkästchen "Codeanalyse auf Build aktivieren", um die Codeanalyse jedes Mal auszuführen, wenn das Projekt mit der ausgewählten Konfiguration erstellt wird. Sie können die Codeanalyse auch manuell ausführen, indem Sie das Menü "Analysieren" öffnen und dann "Codeanalyse ausführen" unter"ProjectName" oder "Codeanalyse für Datei ausführen" auswählen.

  4. Wählen Sie den Regelsatz aus, den Sie verwenden oder einen benutzerdefinierten Regelsatz erstellen möchten. Wenn Sie LLVM/clang-cl verwenden, lesen Sie die Verwendung von Clang-Tidy in Visual Studio zum Konfigurieren von Clang-Tidy-Analyseoptionen.

C/C++-Standardregelsätze

Visual Studio enthält die folgenden Standardsätze von Regeln für systemeigenen Code:

Regelsatz Beschreibung
C++ Core Check Arithmetische Regeln Diese Regeln erzwingen Prüfungen im Zusammenhang mit arithmetischen Vorgängen aus den C++-Kernrichtlinien.
C++ Core Check Bounds Rules Diese Regeln erzwingen das Bounds-Profil der C++-Kernrichtlinien.
C++ Core Check Class Rules Diese Regeln erzwingen Prüfungen im Zusammenhang mit Klassen aus den C++-Kernrichtlinien.
C++ Core Check Concurrency Rules Diese Regeln erzwingen Prüfungen im Zusammenhang mit paralleler Parallelität aus den C++-Kernrichtlinien.
C++ Core Check Const Rules Diese Regeln erzwingen konstbezogene Prüfungen aus den C++-Kernrichtlinien.
C++ Core Check-Deklarationsregeln Diese Regeln erzwingen Prüfungen im Zusammenhang mit Deklarationen aus den C++-Kernrichtlinien.
C++ Core Check Enum Rules Diese Regeln erzwingen enumerationsbezogene Prüfungen aus den C++-Kernrichtlinien.
C++ Core Check Experimental Rules Diese Regeln sammeln einige experimentelle Prüfungen. Schließlich erwarten wir, dass diese Prüfungen in andere Regelsätze verschoben oder vollständig entfernt werden.
C++ Core Check Function Rules Diese Regeln erzwingen Prüfungen im Zusammenhang mit Funktionen aus den C++-Kernrichtlinien.
C++ Core Check GSL-Regeln Diese Regeln erzwingen Prüfungen im Zusammenhang mit der Richtlinienunterstützungsbibliothek aus den C++-Kernrichtlinien.
C++ Core Check Lifetime Rules Diese Regeln erzwingen das Lebensdauerprofil der C++-Kernrichtlinien.
C++ Core Check Owner Pointer Rules Diese Regeln erzwingen Ressourcenverwaltungsprüfungen im Zusammenhang mit owner<T> den C++-Kernrichtlinien.
C++ Core Check Raw Pointer Rules Diese Regeln erzwingen Ressourcenverwaltungsprüfungen im Zusammenhang mit unformatierten Zeigern aus den C++-Kernrichtlinien.
C++-Kernüberprüfungsregeln Diese Regeln erzwingen eine Teilmenge der Prüfungen aus den C++-Kernrichtlinien. Verwenden Sie dieses Regelset, um alle C++-Kernüberprüfungsregeln außer den Enum- und Experimental-Regelsätzen einzuschließen.
C++ Core Check Shared Pointer Rules Diese Regeln erzwingen Ressourcenverwaltungsprüfungen im Zusammenhang mit Typen mit freigegebener Zeigersemantik aus den C++-Kernrichtlinien.
C++ Core Check STL-Regeln Diese Regeln erzwingen Prüfungen im Zusammenhang mit der C++-Standardbibliothek aus den C++-Kernrichtlinien.
C++ Core Check Style Rules Diese Regeln erzwingen Prüfungen im Zusammenhang mit der Verwendung von Ausdrücken und Anweisungen aus den C++-Kernrichtlinien.
C++ Core Check Type Rules Diese Regeln erzwingen das Typprofil der C++-Kernrichtlinien.
C++-Kernüberprüfung eindeutiger Zeigerregeln Diese Regeln erzwingen Ressourcenverwaltungsprüfungen im Zusammenhang mit Typen mit eindeutiger Zeigersemantik aus den C++-Kernrichtlinien.
Parallelitätsprüfungsregeln Diese Regeln erzwingen eine Reihe von Win32-Parallelitätsmusterüberprüfungen in C++.
Parallelitätsregeln Fügt Parallelitätsregeln aus C++-Kernrichtlinien zu Parallelitätsprüfungsregeln hinzu.
Microsoft Native Mindestregeln Diese Regeln zielen auf die kritischsten Probleme in Ihrem nativen Code ab, einschließlich potenzieller Sicherheitslücken und Anwendungsabstürzen. Es wird empfohlen, diesen Regelsatz in alle benutzerdefinierten Regelsätze einzufügen, die Sie für Ihre nativen Projekte erstellen.
Microsoft Native Empfohlene Regeln Diese Regeln konzentrieren sich auf die wichtigsten und häufigsten Probleme in Ihrem systemeigenen Code. Zu diesen Problemen gehören potenzielle Sicherheitslöcher und Anwendungsabstürzen. Es wird empfohlen, diesen Regelsatz in alle benutzerdefinierten Regelsätze einzufügen, die Sie für Ihre nativen Projekte erstellen. Dieser Regelsatz ist für die Verwendung mit Visual Studio Professional Edition und höher vorgesehen. Sie enthält alle Regeln in Den Microsoft Native-Mindestregeln.

Visual Studio enthält die folgenden Standardsätze von Regeln für verwalteten Code:

Regelsatz Beschreibung
Microsoft Basic-Korrektheitsregeln Diese Regeln zielen auf logische Fehler und häufige Irrtümer bei der Verwendung von Framework-APIs ab. Binden Sie diesen Regelsatz zur Erweiterung der Liste von Warnungen mit ein, die von den empfohlenen Mindestregeln gemeldet werden.
Microsoft Basic Design-Richtlinienregeln Diese Regeln zielen auf die Erzwingung von Best Practices ab, sodass Ihr Code leicht verständlich und einfach zu verwenden ist. Binden Sie diesen Regelsatz mit ein, wenn Ihr Projekt Bibliothekscode umfasst oder wenn Sie Best Practices erzwingen möchten, um einen leicht verwaltbaren Code zu gewährleisten.
Microsoft Extended Correctness Rules Diese Regeln erweitern die grundlegenden Korrektheitsregeln, um die gemeldeten Logik- und Framework-Verwendungsfehler zu maximieren. Besonderes Augenmerk wird auf spezifische Szenarien gelegt, z. B. COM-Interop und mobile Anwendungen. Erwägen Sie, diesen Regelsatz einzuschliessen, wenn eines dieser Szenarien für Ihr Projekt gilt oder um weitere Probleme in Ihrem Projekt zu finden.
Richtlinienregeln für erweitertes Microsoft-Design Diese Regeln erweitern die grundlegenden Entwurfsrichtlinienregeln, um die gemeldete Nutzbarkeit und Standard nachhaltige Probleme zu maximieren. Besonderes Augenmerk wird auf Benennungsrichtlinien gelegt. Binden Sie diesen Regelsatz mit ein, wenn Ihr Projekt Bibliothekscode umfasst, oder wenn Sie höchste Standards für das Schreiben von verwaltbarem Code erzwingen möchten.
Microsoft Globalization Rules Diese Regeln zielen auf Probleme ab, durch die verhindert wird, dass Daten in Ihrer Anwendung bei Verwendung in unterschiedlichen Sprachen, Gebietsschemas und Kulturen ordnungsgemäß angezeigt werden. Schließen Sie diesen Regelsatz ein, wenn Ihre Anwendung lokalisiert und/oder globalisiert ist.
Von Microsoft verwaltete Mindestregeln Diese Regeln zielen auf die kritischsten Probleme in Ihrem Code ab, für die die Codeanalyse die genaueste Lösung darstellt. Diese Regeln sind klein und sollen nur in eingeschränkten Visual Studio-Editionen ausgeführt werden. Verwenden Sie MinimumRecommendedRules.ruleset in Verbindung mit anderen Visual Studio-Editionen.
Von Microsoft verwaltete empfohlene Regeln Diese Regeln konzentrieren sich auf die wichtigsten Probleme in Ihrem Code. Zu diesen Problemen gehören potenzielle Sicherheitslöcher, Anwendungsabstürzen und andere wichtige Logik- und Entwurfsfehler. Es wird empfohlen, diesen Regelsatz in alle benutzerdefinierten Regelsätze einzufügen, die Sie für Ihre Projekte erstellen.
Mindestregeln für Microsoft Mixed (C++ /CLR) Diese Regeln konzentrieren sich auf die wichtigsten Probleme in Ihren C++-Projekten, die die Common Language Runtime unterstützen. Zu diesen Problemen gehören potenzielle Sicherheitslöcher, Anwendungsabstürzen und andere wichtige Logik- und Entwurfsfehler. Es wird empfohlen, diesen Regelsatz in alle benutzerdefinierten Regelsätze einzufügen, die Sie für Ihre C++-Projekte erstellen, die die Common Language Runtime unterstützen.
Empfohlene Regeln für Microsoft Mixed (C++ /CLR) Diese Regeln konzentrieren sich auf die häufigsten und kritischen Probleme in Ihren C++-Projekten, die die Common Language Runtime unterstützen. Zu diesen Problemen gehören potenzielle Sicherheitslöcher, Anwendungsabstürzen und andere wichtige Logik- und Entwurfsfehler. Dieses Regelet wurde für die Verwendung in der Visual Studio Professional Edition und höher entwickelt.
Microsoft-Sicherheitsregeln Dieser Regelsatz enthält alle Microsoft-Sicherheitsregeln. Binden Sie diesen Regelsatz mit ein, um die Anzahl gemeldeter potenzieller Sicherheitsprobleme zu maximieren.

So schließen Sie jede Regel ein:

Regelsatz Beschreibung
Alle Microsoft-Regeln Dieser Regelsatz enthält alle Regeln. Das Ausführen dieses Regelsatzes führt möglicherweise zu einer hohen Anzahl gemeldeter Warnungen. Verwenden Sie diesen Regelsatz, um einen Überblick über alle Probleme in Ihrem Code zu erhalten. Es kann Ihnen helfen, zu entscheiden, welche der stärker fokussierten Regelsätze für Ihre Projekte am besten geeignet sind.

Codeanalyse ausführen

Auf der Seite "Codeanalyse " des Dialogfelds "Projekteigenschaften" können Sie die Codeanalyse so konfigurieren, dass sie jedes Mal ausgeführt wird, wenn Sie Ihr Projekt erstellen. Sie können die Codeanalyse auch manuell ausführen.

Zum Ausführen der Codeanalyse in einer Projektmappe:

  • Wählen Sie im Menü "Erstellen " die Option "Codeanalyse für Lösung ausführen" aus.

Zum Ausführen der Codeanalyse in einem Projekt:

  1. Wählen Sie im Projektmappen-Explorer den Namen des Projekts aus.

  2. Wählen Sie im Menü "Erstellen " die Option "Codeanalyse fürProjektname ausführen" aus.

So führen Sie die Codeanalyse für eine Datei aus:

  1. Wählen Sie im Projektmappen-Explorer den Namen der Datei aus.

  2. Wählen Sie im Menü "Erstellen" die Option "Codeanalyse ausführen" für "Datei" aus, oder drücken Sie STRG+UMSCHALT+ALT+F7.

    Das Projekt oder die Projektmappe wird kompiliert und Codeanalyse wird ausgeführt. Ergebnisse werden im Fenster "Fehlerliste" angezeigt.

Analysieren und Auflösen von Codeanalysewarnungen

Im Fenster "Fehlerliste" werden die gefundenen Codeanalysewarnungen aufgelistet. Die Ergebnisse werden in einer Tabelle angezeigt. Wenn weitere Informationen zu einer bestimmten Warnung verfügbar sind, enthält die erste Spalte ein Erweiterungssteuerelement. Wählen Sie sie aus, um die Anzeige für zusätzliche Informationen zum Problem zu erweitern. Wenn möglich, zeigt die Codeanalyse die Zeilennummern und Analyselogik, die zu der Warnung geführt hat.

Ausführliche Informationen zur Warnung, einschließlich möglicher Lösungen für das Problem, wählen Sie die Warnungs-ID in der Spalte "Code" aus, um den entsprechenden Onlinehilfeartikel anzuzeigen.

Doppelklicken Sie auf eine Warnung, um den Cursor in die Codezeile zu verschieben, die die Warnung im Visual Studio-Code-Editor verursacht hat. Oder drücken Sie die EINGABETASTE bei der ausgewählten Warnung.

Nachdem Sie das Problem verstanden haben, können Sie es in Ihrem Code beheben. Führen Sie dann die Codeanalyse erneut aus, um sicherzustellen, dass die Warnung nicht mehr in der Fehlerliste angezeigt wird.

Erstellen von Arbeitsaufgaben für Codeanalysewarnungen

Funktionen für die Arbeitselementeverfolgung können Sie in Visual Studio protokollieren. Um dieses Feature zu verwenden, müssen Sie eine Verbindung mit einer Instanz von Azure DevOps Server (früher Team Foundation Server) herstellen.

So erstellen Sie eine Arbeitsaufgabe für eine oder mehrere C/C++-Codewarnungen

  1. Erweitern Sie in der Fehlerliste die Warnungen, und wählen Sie sie aus.

  2. Wählen Sie im Kontextmenü für die Warnungen " Arbeitsaufgabe erstellen" und dann den Arbeitsaufgabentyp aus.

  3. Visual Studio erstellt ein einzelnes Arbeitselement für die ausgewählten Warnungen und zeigt das Arbeitselement in einem Dokumentfenster der IDE.

  4. Fügen Sie weitere Informationen hinzu, und wählen Sie dann " Arbeitselement speichern" aus.

Suchen und Filtern von Codeanalyseergebnissen

Sie können lange Listen mit Warnmeldungen durchsuchen und Warnungen in Projektmappen mit mehreren Projekten filtern.

  • So filtern Sie Warnungen nach Titel- oder Warnungs-ID: Geben Sie den Schlüsselwort (keyword) in das Suchfehlerlistenfeld ein.

  • Um Warnungen nach Schweregrad zu filtern: Standardmäßig werden Codeanalysemeldungen einem Schweregrad von Warnung zugewiesen. Sie können den Schweregrad einer oder mehrerer Nachrichten als Fehler in einem benutzerdefinierten Regelsatz zuweisen. Wählen Sie in der Spalte "Schweregrad " der Fehlerliste den Dropdownpfeil und dann das Filtersymbol aus. Wählen Sie "Warnung" oder "Fehler " aus, um nur die Nachrichten anzuzeigen, denen der jeweilige Schweregrad zugewiesen ist. Wählen Sie " Alle auswählen" aus, um alle Nachrichten anzuzeigen.

Siehe auch