Exemplarische Vorgehensweise: Analysieren von C/C++-Code für Fehler

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie C/C++-Code auf potenzielle Codefehler analysiert wird. Es verwendet die Codeanalysetools für C/C++-Code.

In dieser exemplarischen Vorgehensweise gehen Sie wie folgt vor:

  • Führen Sie codeanalyse auf systemeigenem Code aus.
  • Analysieren Sie Codefehlerwarnungen.
  • Warnung als Fehler behandeln.
  • Kommentieren Sie Quellcode, um die Analyse von Codefehlern zu verbessern.

Voraussetzungen

Ausführen der Codeanalyse auf systemeigenem Code

So führen Sie Codefehleranalyse für systemeigenen Code aus

  1. Öffnen Sie die CppDemo-Projektmappe in Visual Studio.

    Die CppDemo-Lösung füllt jetzt Projektmappen-Explorer auf.

  2. Wählen Sie im Menü Erstellen die Option Projektmappe neu erstellen aus.

    Die Lösung erstellt ohne Fehler oder Warnungen.

  3. Wählen Sie in Projektmappen-Explorer das Projekt "CodeDefects" aus.

  4. Klicken Sie im Menü Projekt auf Eigenschaften.

    Das Dialogfeld "Eigenschaftenseiten von CodeDefects" wird angezeigt.

  5. Wählen Sie die Codeanalyse-Eigenschaftenseite aus.

  6. Ändern Sie die Eigenschaft "Codeanalyse für Build aktivieren" in "Ja". Klicken Sie auf OK, um die Änderungen zu speichern.

  7. Erstellen Sie das CodeDefects-Projekt neu.

    Codeanalysewarnungen werden im Fehlerlistenfenster angezeigt.

  1. Öffnen Sie die CppDemo-Projektmappe in Visual Studio.

    Die CppDemo-Lösung füllt jetzt Projektmappen-Explorer auf.

  2. Wählen Sie im Menü Erstellen die Option Projektmappe neu erstellen aus.

    Die Lösung erstellt ohne Fehler oder Warnungen.

    Hinweis

    In Visual Studio 2017 wird möglicherweise eine spurlose Warnung E1097 unknown attribute "no_init_all" im IntelliSense-Modul angezeigt. Sie können diese Warnung problemlos ignorieren.

  3. Wählen Sie in Projektmappen-Explorer das Projekt "CodeDefects" aus.

  4. Klicken Sie im Menü Projekt auf Eigenschaften.

    Das Dialogfeld "Eigenschaftenseiten von CodeDefects" wird angezeigt.

  5. Wählen Sie die Codeanalyse-Eigenschaftenseite aus.

  6. Aktivieren Sie das Kontrollkästchen "Codeanalyse auf Build aktivieren". Klicken Sie auf OK, um die Änderungen zu speichern.

  7. Erstellen Sie das CodeDefects-Projekt neu.

    Codeanalysewarnungen werden im Fehlerlistenfenster angezeigt.

So analysieren Sie Codefehlerwarnungen

  1. Wählen Sie im Menü Ansicht die Option Fehlerliste aus.

    Dieses Menüelement ist möglicherweise nicht sichtbar. Dies hängt vom Entwicklerprofil ab, das Sie in Visual Studio ausgewählt haben. Möglicherweise müssen Sie im Menü "Ansicht" auf "Andere Fenster" zeigen und dann "Fehlerliste" auswählen.

  2. Doppelklicken Sie im Fenster "Fehlerliste " auf die folgende Warnung:

    C6230: Implizite Umwandlung zwischen semantisch unterschiedlichen Typen: Verwenden von HRESULT in einem booleschen Kontext.

    Der Code-Editor zeigt die Zeile an, die die Warnung innerhalb der Funktion bool ProcessDomain()verursacht hat. Diese Warnung gibt an, dass eine HRESULT In einer "if"-Anweisung verwendet wird, in der ein boolesches Ergebnis erwartet wird. Dies ist in der Regel ein Fehler, da das S_OK HRESULT von einer Funktion zurückgegeben wird, die Erfolg anzeigt, aber wenn es in einen booleschen Wert konvertiert wird, in den es ausgewertet wird false.

  3. Korrigieren Sie diese Warnung mithilfe des SUCCEEDED Makros, in das konvertiert wird true , wenn ein HRESULT Rückgabewert auf Erfolg hinweist. Ihr Code sollte dem folgenden Code ähneln:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Doppelklicken Sie in der Fehlerliste auf die folgende Warnung:

    C6282: Falscher Operator: Zuweisung einer Konstante im booleschen Kontext. Verwenden Sie stattdessen "==".

  5. Korrigieren Sie diese Warnung, indem Sie auf Gleichheit testen. Ihr Code sollte dem folgenden Code ähneln:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Korrigieren Sie die erneuten Standard C6001-Warnungen in der Fehlerliste, indem Sie initialisieren i und j auf 0 festlegen.

  7. Erstellen Sie das CodeDefects-Projekt neu.

    Das Projekt wird ohne Warnungen oder Fehler erstellt.

Korrigieren von Warnungen zur Quellcodeanmerkung

So aktivieren Sie die Warnungen zur Quellcodeanmerkung in annotation.c

  1. Wählen Sie in Projektmappen-Explorer das Projekt "Anmerkungen" aus.

  2. Klicken Sie im Menü Projekt auf Eigenschaften.

    Das Dialogfeld "Eigenschaftenseiten für Anmerkungen" wird angezeigt.

  3. Wählen Sie die Codeanalyse-Eigenschaftenseite aus.

  4. Ändern Sie die Eigenschaft "Codeanalyse für Build aktivieren" in "Ja". Klicken Sie auf OK, um die Änderungen zu speichern.

  1. Wählen Sie in Projektmappen-Explorer das Projekt "Anmerkungen" aus.

  2. Klicken Sie im Menü Projekt auf Eigenschaften.

    Das Dialogfeld "Eigenschaftenseiten für Anmerkungen" wird angezeigt.

  3. Wählen Sie die Codeanalyse-Eigenschaftenseite aus.

  4. Aktivieren Sie das Kontrollkästchen "Codeanalyse auf Build aktivieren". Klicken Sie auf OK, um die Änderungen zu speichern.

So korrigieren Sie die Warnungen der Quellcodeanmerkung in annotation.c

  1. Erstellen Sie das Annotations-Projekt neu.

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

  3. Doppelklicken Sie in der Fehlerliste auf die folgende Warnung:

    C6011: Dereferencing NULL-Zeiger 'newNode'.

    Diese Warnung gibt an, dass der Aufrufer den Rückgabewert überprüft. In diesem Fall gibt ein Aufruf möglicherweise AllocateNode einen NULL-Wert zurück. Die Headerdatei "annotations.h" finden Sie in der Funktionsdeklaration für AllocateNode.

  4. Der Cursor befindet sich an der Position in der Datei "annotations.cpp", an der die Warnung aufgetreten ist.

  5. Verwenden Sie zum Korrigieren dieser Warnung eine "if"-Anweisung, um den Rückgabewert zu testen. Ihr Code sollte dem folgenden Code ähneln:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Erstellen Sie das Annotations-Projekt neu.

    Das Projekt wird ohne Warnungen oder Fehler erstellt.

Verwenden der Quellcodeanmerkung zum Ermitteln weiterer Probleme

So verwenden Sie die Quellcodeanmerkung

  1. Kommentieren Sie formale Parameter und rückgabewert der Funktion AddTail , um anzugeben, dass die Zeigerwerte null sein können:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. Wählen Sie im Menü Build die Option Codeanalyse für Lösung ausführen aus.

  3. Doppelklicken Sie in der Fehlerliste auf die folgende Warnung:

    C6011: Dereferencing NULL-Zeiger 'node'.

    Diese Warnung gibt an, dass der an die Funktion übergebene Knoten null sein kann.

  4. Um diese Warnung zu korrigieren, verwenden Sie am Anfang der Funktion eine "if"-Anweisung, um den übergebenen Wert zu testen. Ihr Code sollte dem folgenden Code ähneln:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. Wählen Sie im Menü Build die Option Codeanalyse für Lösung ausführen aus.

    Das Projekt erstellt jetzt ohne Warnungen oder Fehler.

Siehe auch

Exemplarische Vorgehensweise: Analysieren von verwaltetem Code auf Codefehler
Codeanalyse für C/C++