Exemplarische Vorgehensweise: Analysieren von C/C++-Code auf FehlerWalkthrough: Analyzing C/C++ code for defects

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie Sie C/C++-Code auf potenzielle Code Fehler analysieren.This walkthrough demonstrates how to analyze C/C++ code for potential code defects. Es verwendet die Code Analysetools für C/C++-Code.It uses the code analysis tools for C/C++ code.

In dieser exemplarischen Vorgehensweise gehen Sie wie folgt vor:In this walkthrough, you'll:

  • Ausführen der Code Analyse für nativen Code.Run code analysis on native code.
  • Analysieren von Code Fehler Warnungen.Analyze code defect warnings.
  • Behandeln Sie die Warnung als Fehler.Treat warning as an error.
  • Kommentieren Sie den Quellcode, um die Code Fehleranalyse zu verbessern.Annotate source code to improve code defect analysis.

VoraussetzungenPrerequisites

  • Eine Kopie des CppDemo-Beispiels.A copy of the CppDemo Sample.
  • Grundlegendes Verständnis von C/C++.Basic understanding of C/C++.

Ausführen der Code Analyse für nativen CodeRun code analysis on native code

So führen Sie die Code Fehleranalyse für nativen Code ausTo run code defect analysis on native code

  1. Öffnen Sie die CppDemo-Projekt Mappe in Visual Studio.Open the CppDemo solution in Visual Studio.

    Die CppDemo-Lösung füllt nun Projektmappen-Explorer auf.The CppDemo solution now populates Solution Explorer .

  2. Wählen Sie im Menü Erstellen die Option Projekt Mappe neu erstellen aus.On the Build menu, choose Rebuild Solution .

    Die Lösung wird ohne Fehler oder Warnungen erstellt.The solution builds without any errors or warnings.

  3. Wählen Sie in Projektmappen-Explorer das Projekt codemängel aus.In Solution Explorer , select the CodeDefects project.

  4. Klicken Sie im Menü Projekt auf Eigenschaften .On the Project menu, choose Properties .

    Das Dialogfeld Codedefekte-Eigenschaften Seiten wird angezeigt.The CodeDefects Property Pages dialog box is displayed.

  5. Wählen Sie die Eigenschaften Seite Code Analyse aus.Select the Code Analysis property page.

  6. Ändern Sie die Eigenschaft Code Analyse für Build aktivieren in Ja .Change the Enable Code Analysis on Build property to Yes . Klicken Sie auf OK , um die Änderungen zu speichern.Choose OK to save your changes.

  7. Erstellen Sie das Projekt "codemängel" neu.Rebuild the CodeDefects project.

    Code Analyse Warnungen werden im Fenster Fehlerliste angezeigt.Code analysis warnings are displayed in the Error List window.

  1. Öffnen Sie die CppDemo-Projekt Mappe in Visual Studio.Open the CppDemo solution in Visual Studio.

    Die CppDemo-Lösung füllt nun Projektmappen-Explorer auf.The CppDemo solution now populates Solution Explorer .

  2. Wählen Sie im Menü Erstellen die Option Projekt Mappe neu erstellen aus.On the Build menu, choose Rebuild Solution .

    Die Lösung wird ohne Fehler oder Warnungen erstellt.The solution builds without any errors or warnings.

    Hinweis

    In Visual Studio 2017 wird möglicherweise eine falsche Warnung E1097 unknown attribute "no_init_all" in der IntelliSense-Engine angezeigt.In Visual Studio 2017, you may see a spurious warning E1097 unknown attribute "no_init_all" in the IntelliSense engine. Sie können diese Warnung problemlos ignorieren.You can safely ignore this warning.

  3. Wählen Sie in Projektmappen-Explorer das Projekt codemängel aus.In Solution Explorer , select the CodeDefects project.

  4. Klicken Sie im Menü Projekt auf Eigenschaften .On the Project menu, choose Properties .

    Das Dialogfeld Codedefekte-Eigenschaften Seiten wird angezeigt.The CodeDefects Property Pages dialog box is displayed.

  5. Wählen Sie die Eigenschaften Seite Code Analyse aus.Select the Code Analysis property page.

  6. Aktivieren Sie das Kontrollkästchen Code Analyse bei Build aktivieren .Select the Enable Code Analysis on Build check box. Klicken Sie auf OK , um die Änderungen zu speichern.Choose OK to save your changes.

  7. Erstellen Sie das Projekt "codemängel" neu.Rebuild the CodeDefects project.

    Code Analyse Warnungen werden im Fenster Fehlerliste angezeigt.Code analysis warnings are displayed in the Error List window.

So analysieren Sie Code Fehler WarnungenTo analyze code defect warnings

  1. Wählen Sie im Menü Ansicht die Option Fehlerliste aus.On the View menu, choose Error List .

    Dieses Menü Element ist möglicherweise nicht sichtbar.This menu item may not be visible. Dies hängt von dem Entwickler Profil ab, das Sie in Visual Studio ausgewählt haben.It depends on the developer profile that you chose in Visual Studio. Möglicherweise müssen Sie auf andere Fenster im Menü Ansicht zeigen und dann auf Fehlerliste klicken.You might have to point to Other Windows on the View menu, and then choose Error List .

  2. Doppelklicken Sie im Fenster Fehlerliste auf die folgende Warnung:In the Error List window, double-click the following warning:

    C6230: Implizite Umwandlung zwischen semantisch unterschiedlichen Typen: HRESULT wird in einem Boolean-Kontext verwendet.C6230: Implicit cast between semantically different types: using HRESULT in a Boolean context.

    Der Code-Editor zeigt die Zeile an, die die Warnung in der Funktion verursacht hat bool ProcessDomain() .The code editor displays the line that caused the warning inside the function bool ProcessDomain(). Diese Warnung gibt an, dass eine- HRESULT Anweisung in einer if-Anweisung verwendet wird, in der ein boolesches Ergebnis erwartet wird.This warning indicates that a HRESULT is being used in an 'if' statement where a Boolean result is expected. Dies ist in der Regel ein Fehler, denn wenn das S_OK HRESULT von einer Funktion zurückgegeben wird, gibt es einen Erfolg an, aber wenn es in einen booleschen Wert konvertiert wird, wird es als ausgewertet false .It's typically a mistake, because when the S_OK HRESULT is returned from a function it indicates success, but when converted into a boolean value it evaluates to false .

  3. Korrigieren Sie diese Warnung, indem Sie das- SUCCEEDED Makro verwenden, das in konvertiert wird, true Wenn ein HRESULT Rückgabewert einen Erfolg angibt.Correct this warning by using the SUCCEEDED macro, which converts to true when a HRESULT return value indicates success. Der Code sollte dem folgenden Code ähneln:Your code should resemble the following code:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Doppelklicken Sie im Fehlerliste auf die folgende Warnung:In the Error List , double-click the following warning:

    C6282: Falscher Operator: Zuweisung einer Konstanten im booleschen Kontext.C6282: Incorrect operator: assignment of constant in Boolean context. Verwenden Sie stattdessen "= =".Consider using '==' instead.

  5. Korrigieren Sie diese Warnung, indem Sie auf Gleichheit testen.Correct this warning by testing for equality. Der Code sollte in etwa wie der folgende Code aussehen:Your code should look similar to the following code:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Korrigieren Sie die verbleibenden C6001-Warnungen im Fehlerliste i , indem j Sie und auf 0 (null) initialisieren.Correct the remaining C6001 warnings in the Error List by initializing i and j to 0.

  7. Erstellen Sie das Projekt "codemängel" neu.Rebuild the CodeDefects project.

    Das Projekt wird ohne Warnungen oder Fehler erstellt.The project builds without any warnings or errors.

Korrekte Warnungen der Quell Code AnmerkungCorrect source code annotation warnings

So aktivieren Sie die Warnungen der Quell Code Anmerkung in der Anmerkung. cTo enable the source code annotation warnings in annotation.c

  1. Wählen Sie in Projektmappen-Explorer das Projekt Annotations aus.In Solution Explorer, select the Annotations project.

  2. Klicken Sie im Menü Projekt auf Eigenschaften .On the Project menu, choose Properties .

    Das Dialogfeld Annotations-Eigenschaften Seiten wird angezeigt.The Annotations Property Pages dialog box is displayed.

  3. Wählen Sie die Eigenschaften Seite Code Analyse aus.Select the Code Analysis property page.

  4. Ändern Sie die Eigenschaft Code Analyse für Build aktivieren in Ja .Change the Enable Code Analysis on Build property to Yes . Klicken Sie auf OK , um die Änderungen zu speichern.Choose OK to save your changes.

  1. Wählen Sie in Projektmappen-Explorer das Projekt Annotations aus.In Solution Explorer, select the Annotations project.

  2. Klicken Sie im Menü Projekt auf Eigenschaften .On the Project menu, choose Properties .

    Das Dialogfeld Annotations-Eigenschaften Seiten wird angezeigt.The Annotations Property Pages dialog box is displayed.

  3. Wählen Sie die Eigenschaften Seite Code Analyse aus.Select the Code Analysis property page.

  4. Aktivieren Sie das Kontrollkästchen Code Analyse bei Build aktivieren .Select the Enable Code Analysis on Build check box. Klicken Sie auf OK , um die Änderungen zu speichern.Choose OK to save your changes.

So korrigieren Sie die Warnungen der Quell Code Anmerkung in der Anmerkung. cTo correct the source code annotation warnings in annotation.c

  1. Erstellen Sie das Projekt Annotations neu.Rebuild the Annotations project.

  2. Wählen Sie im Menü Erstellen die Option Code Analyse für Anmerkungen ausführen aus .On the Build menu, choose Run Code Analysis on Annotations .

  3. Doppelklicken Sie im Fehlerliste auf die folgende Warnung:In the Error List , double-click the following warning:

    C6011: dereferenzierender NULL-Zeiger "newNode".C6011: Dereferencing NULL pointer 'newNode'.

    Diese Warnung weist darauf hin, dass der Aufrufer den Rückgabewert nicht überprüfen konnte.This warning indicates failure by the caller to check the return value. In diesem Fall kann ein-Rückruf AllocateNode einen NULL-Wert zurückgeben.In this case, a call to AllocateNode might return a NULL value. Weitere Informationen zur Funktionsdeklaration für finden Sie in der Annotations. h-Header Datei AllocateNode .See the annotations.h header file for the function declaration for AllocateNode.

  4. Der Cursor befindet sich an der Position in der Datei "Annotations. cpp", in der die Warnung aufgetreten ist.The cursor is on the location in the annotations.cpp file where the warning occurred.

  5. Um diese Warnung zu korrigieren, verwenden Sie eine if-Anweisung, um den Rückgabewert zu testen.To correct this warning, use an 'if' statement to test the return value. Der Code sollte dem folgenden Code ähneln:Your code should resemble the following code:

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

    Das Projekt wird ohne Warnungen oder Fehler erstellt.The project builds without any warnings or errors.

Verwenden Sie die Quell Code Anmerkung, um weitere Probleme zu ermitteln.Use source code annotation to discover more issues

So verwenden Sie die Quell Code AnmerkungTo use source code annotation

  1. Kommentieren Sie formale Parameter und den Rückgabewert der Funktion AddTail , um anzugeben, dass die Zeiger Werte möglicherweise NULL sind:Annotate formal parameters and return value of the function AddTail to indicate the pointer values may be null:

    _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.On the Build menu, choose Run Code Analysis on Solution .

  3. Doppelklicken Sie im Fehlerliste auf die folgende Warnung:In the Error List , double-click the following warning:

    C6011: dereferenzierender NULL-Zeiger "Node".C6011: Dereferencing NULL pointer 'node'.

    Diese Warnung gibt an, dass der an die Funktion eingeführte Knoten NULL sein kann.This warning indicates that the node passed into the function might be null.

  4. Um diese Warnung zu korrigieren, verwenden Sie eine if-Anweisung am Anfang der Funktion, um den bestandenen Wert zu testen.To correct this warning, use an 'if' statement at the beginning of the function to test the passed in value. Der Code sollte dem folgenden Code ähneln:Your code should resemble the following code:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. Wählen Sie im Menü Build die Option Codeanalyse für Lösung ausführen aus.On the Build menu, choose Run Code Analysis on Solution .

    Das Projekt wird jetzt ohne Warnungen oder Fehler erstellt.The project now builds without any warnings or errors.

Siehe auchSee also

Exemplarische Vorgehensweise: Analysieren von verwaltetem Code auf Code FehlerWalkthrough: Analyzing Managed Code for Code Defects
Codeanalyse für C/C++Code analysis for C/C++