Delen via


Overzicht: C/C++-code analyseren op defecten

In dit scenario ziet u hoe u C/C++-code analyseert op mogelijke codefouten. Het maakt gebruik van de hulpprogramma's voor codeanalyse voor C/C++-code.

In deze handleiding gaat u het volgende doen:

  • Voer codeanalyse uit op systeemeigen code.
  • Waarschuwingen voor codefouten analyseren.
  • Waarschuwing behandelen als een fout.
  • Aantekeningen toevoegen aan broncode om de analyse van codefouten te verbeteren.

Vereiste voorwaarden

Codeanalyse uitvoeren op systeemeigen code

Een analyse van codefouten uitvoeren op systeemeigen code

  1. Open de CppDemo-oplossing in Visual Studio.

    De CppDemo-oplossing wordt nu weergegeven in Solution Explorer.

  2. Kies In het menu Opbouwende optie Oplossing opnieuw opbouwen.

    De oplossing bouwt zonder fouten of waarschuwingen.

  3. Selecteer in Solution Explorer het Project CodeDefects.

  4. Kies Eigenschappen in het menu Project.

    Het dialoogvenster Eigenschappenpagina's van CodeDefects wordt weergegeven.

  5. Kies de eigenschapspagina codeanalyse.

  6. Wijzig de eigenschap Codeanalyse bij build inschakelen in Ja. Kies OK- om uw wijzigingen op te slaan.

  7. Bouw het CodeDefects-project opnieuw.

    Waarschuwingen voor codeanalyse worden weergegeven in het venster Foutenlijst .

  1. Open de CppDemo-oplossing in Visual Studio.

    De CppDemo-oplossing wordt nu weergegeven in Solution Explorer.

  2. Kies In het menu Opbouwende optie Oplossing opnieuw opbouwen.

    De oplossing bouwt zonder fouten of waarschuwingen.

    Opmerking

    In Visual Studio 2017 ziet u mogelijk een valse waarschuwing E1097 unknown attribute "no_init_all" in de IntelliSense-engine. U mag dit bericht negeren.

  3. Selecteer in Solution Explorer het Project CodeDefects.

  4. Kies Eigenschappen in het menu Project.

    Het dialoogvenster Eigenschappenpagina's van CodeDefects wordt weergegeven.

  5. Kies de eigenschapspagina codeanalyse.

  6. Schakel het selectievakje Codeanalyse inschakelen in build in. Kies OK- om uw wijzigingen op te slaan.

  7. Bouw het CodeDefects-project opnieuw.

    Waarschuwingen voor codeanalyse worden weergegeven in het venster Foutenlijst .

Waarschuwingen voor codefouten analyseren

  1. Kies in het menu Beeld de optie Lijst met fouten.

    Dit menu-item is mogelijk niet zichtbaar. Dit is afhankelijk van het ontwikkelaarsprofiel dat u hebt gekozen in Visual Studio. Mogelijk moet u andere vensters in het menu Beeld aanwijzen en vervolgens Foutenlijst kiezen.

  2. Dubbelklik in het venster Foutenlijst op de volgende waarschuwing:

    C6230: Impliciete cast tussen semantisch verschillende typen: hresult gebruiken in een Booleaanse context.

    De code-editor geeft de regel weer die de waarschuwing in de functie bool ProcessDomain()heeft veroorzaakt. Deze waarschuwing geeft aan dat een HRESULT wordt gebruikt in een if-instructie waarbij een Booleaanse resultaat wordt verwacht. Dit is meestal een fout, omdat wanneer het S_OK HRESULT van een functie wordt geretourneerd, dit succes aangeeft, maar wanneer het wordt omgezet naar een booleaanse waarde, dit naar false evalueert.

  3. Corrigeer deze waarschuwing door de SUCCEEDED macro te gebruiken, die bij een succesvolle retourwaarde wordt omgezet naar true. Uw code moet er ongeveer als volgt uitzien:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Dubbelklik in de lijst met fouten op de volgende waarschuwing:

    C6282: Onjuiste operator: toewijzing van constante in Booleaanse context. Overweeg in plaats daarvan '=' te gebruiken.

  5. Corrigeer deze waarschuwing door te testen op gelijkheid. Uw code moet er ongeveer uitzien als de volgende code:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Corrigeer de resterende C6001-waarschuwingen in de foutenlijst door te initialiseren i en j tot 0.

  7. Bouw het CodeDefects-project opnieuw.

    Het project bouwt zonder waarschuwingen of fouten.

Aantekeningswaarschuwingen voor broncode corrigeren

De annotatiewaarschuwingen voor de broncode inschakelen in annotation.c

  1. Selecteer in Solution Explorer het project Aantekeningen.

  2. Kies Eigenschappen in het menu Project.

    Het dialoogvenster Eigenschappen van annotatiespagina's wordt weergegeven.

  3. Kies de eigenschapspagina codeanalyse.

  4. Wijzig de eigenschap Codeanalyse bij build inschakelen in Ja. Kies OK- om uw wijzigingen op te slaan.

  1. Selecteer in Solution Explorer het project Aantekeningen.

  2. Kies Eigenschappen in het menu Project.

    Het dialoogvenster Eigenschappen van annotatiespagina's wordt weergegeven.

  3. Kies de eigenschapspagina codeanalyse.

  4. Schakel het selectievakje Codeanalyse inschakelen in build in. Kies OK- om uw wijzigingen op te slaan.

De annotatiewaarschuwingen in de broncode corrigeren in het bestand annotation.c

  1. Bouw het project Aantekeningen opnieuw.

  2. Op het menu Opbouwen kies Voer codeanalyse uit op annotaties.

  3. Dubbelklik in de lijst met fouten op de volgende waarschuwing:

    C6011: Dereferencing NULL-aanwijzer 'newNode'.

    Deze waarschuwing geeft aan dat de aanroeper de retourwaarde niet heeft gecontroleerd. In dit geval kan een oproep naar AllocateNode een NULL-waarde teruggeven. Zie het headerbestand annotaations.h voor de functiedeclaratie voor AllocateNode.

  4. De cursor bevindt zich op de locatie in het annotations.cpp-bestand waar de waarschuwing is opgetreden.

  5. Als u deze waarschuwing wilt corrigeren, gebruikt u een if-instructie om de retourwaarde te testen. Uw code moet er ongeveer als volgt uitzien:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Bouw het project Aantekeningen opnieuw.

    Het project bouwt zonder waarschuwingen of fouten.

Broncodeaantekening gebruiken om meer problemen te detecteren

Broncodeaantekening gebruiken

  1. Aantekeningen maken bij formele parameters en retourwaarde van de functie AddTail om aan te geven dat de aanwijzerwaarden null kunnen zijn:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. Kies Codeanalyse uitvoeren in oplossing in het menu Opbouwen.

  3. Dubbelklik in de lijst met fouten op de volgende waarschuwing:

    C6011: Derefereren van NULL-aanwijzer 'node'.

    Deze waarschuwing geeft aan dat het knooppunt dat is doorgegeven aan de functie mogelijk null is.

  4. Als u deze waarschuwing wilt corrigeren, gebruikt u een if-instructie aan het begin van de functie om de doorgegeven waarde te testen. Uw code moet er ongeveer als volgt uitzien:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. Kies Codeanalyse uitvoeren in oplossing in het menu Opbouwen.

    Het project wordt nu gebouwd zonder waarschuwingen of fouten.

Zie ook

Overzicht: Beheerde code analyseren voor codefouten
Codeanalyse voor C/C++