Dela via


Genomgång: Analysera C/C++-kod för defekter

Den här genomgången visar hur du analyserar C/C++-kod för potentiella kodfel. Den använder kodanalysverktygen för C/C++-kod.

I den här genomgången gör du följande:

  • Kör kodanalys på intern kod.
  • Analysera varningar om kodfel.
  • Behandla varningen som ett fel.
  • Kommentera källkoden för att förbättra kodfelanalysen.

Förutsättningar

Köra kodanalys på intern kod

Så här kör du kodfelanalys på intern kod

  1. Öppna CppDemo-lösningen i Visual Studio.

    CppDemo-lösningen fyller nu i Solution Explorer.

  2. På menyn Skapa väljer du Återskapa lösning.

    Lösningen skapas utan fel eller varningar.

  3. I Solution Explorer väljer du projektet CodeDefects.

  4. Projekt-menyn väljer du Egenskaper.

    Dialogrutan CodeDefects Property Pages visas.

  5. Välj egenskapssidan Kodanalys .

  6. Ändra egenskapen Aktivera kodanalys på build till Ja. Välj OK för att spara ändringarna.

  7. Återskapa CodeDefects-projektet.

    Kodanalysvarningar visas i fönstret Fellista .

  1. Öppna CppDemo-lösningen i Visual Studio.

    CppDemo-lösningen fyller nu i Solution Explorer.

  2. På menyn Skapa väljer du Återskapa lösning.

    Lösningen skapas utan fel eller varningar.

    Anmärkning

    I Visual Studio 2017 kan du se en falsk varning E1097 unknown attribute "no_init_all" i IntelliSense-motorn. Du kan ignorera den här varningen.

  3. I Solution Explorer väljer du projektet CodeDefects.

  4. Projekt-menyn väljer du Egenskaper.

    Dialogrutan CodeDefects Property Pages visas.

  5. Välj egenskapssidan Kodanalys .

  6. Markera kryssrutan Aktivera kodanalys på build . Välj OK för att spara ändringarna.

  7. Återskapa CodeDefects-projektet.

    Kodanalysvarningar visas i fönstret Fellista .

Så här analyserar du varningar om kodfel

  1. På menyn Visa väljer du Fellista.

    Det här menyalternativet kanske inte är synligt. Det beror på vilken utvecklarprofil du valde i Visual Studio. Du kan behöva peka på Andra Windows på menyn Visa och sedan välja Fellista.

  2. Dubbelklicka på följande varning i fönstret Fellista :

    C6230: Implicit konvertering mellan semantiskt olika typer: användning av HRESULT i ett booleskt sammanhang.

    Kodredigeraren visar den rad som orsakade varningen i funktionen bool ProcessDomain(). Den här varningen anger att en HRESULT används i en if-instruktion där ett booleskt resultat förväntas. Det är vanligtvis ett misstag, eftersom när S_OK HRESULT returneras från en funktion indikerar det framgång, men när det konverteras till ett booleskt värde utvärderas det till false.

  3. Korrigera den här varningen med hjälp av SUCCEEDED makrot, som konverteras till true när ett HRESULT returvärde indikerar framgång. Koden bör likna följande kod:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Dubbelklicka på följande varning i fellistan:

    C6282: Felaktig operator: tilldelning av konstant i boolesk kontext. Överväg att använda '==' i stället.

  5. Korrigera den här varningen genom att testa för likhet. Koden bör se ut ungefär så här:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Korrigera de återstående C6001-varningarna i fellistan genom att initiera i och j till 0.

  7. Återskapa CodeDefects-projektet.

    Projektet byggs utan varningar eller fel.

Korrigera varningar om källkodsanteckningar

Så här aktiverar du varningar om källkodskommentarer i annotation.c

  1. I Solution Explorer väljer du projektet Anteckningar.

  2. Projekt-menyn väljer du Egenskaper.

    Dialogrutan Egenskapssidor för anteckningar visas.

  3. Välj egenskapssidan Kodanalys .

  4. Ändra egenskapen Aktivera kodanalys på build till Ja. Välj OK för att spara ändringarna.

  1. I Solution Explorer väljer du projektet Anteckningar.

  2. Projekt-menyn väljer du Egenskaper.

    Dialogrutan Egenskapssidor för anteckningar visas.

  3. Välj egenskapssidan Kodanalys .

  4. Markera kryssrutan Aktivera kodanalys på build . Välj OK för att spara ändringarna.

Så här korrigerar du varningar om källkodsanteckningar i anteckningar.c

  1. Återskapa annoteringsprojektet.

  2. På menyn Skapa väljer du Kör kodanalys på anteckningar.

  3. Dubbelklicka på följande varning i fellistan:

    C6011: Dereferensiering av NULL-pekare "newNode".

    Den här varningen anger att anroparen inte har kontrollerat returvärdet. I det här fallet kan ett anrop till AllocateNode returnera ett NULL-värde. Se rubrikfilen annotations.h för funktionsdeklarationen för AllocateNode.

  4. Markören finns på platsen i filen annotations.cpp där varningen inträffade.

  5. Om du vill korrigera den här varningen använder du en if-instruktion för att testa returvärdet. Koden bör likna följande kod:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Återskapa annoteringsprojektet.

    Projektet byggs utan varningar eller fel.

Använda källkodsanteckning för att identifiera fler problem

Så här använder du källkodsanteckning

  1. Kommentera formella parametrar och returvärdet för funktionen AddTail för att indikera att pekarvärdena kan vara null:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. På menyn Skapa väljer du Kör kodanalys på lösning.

  3. Dubbelklicka på följande varning i fellistan:

    C6011: Avreferering av NULL-pekare "node".

    Den här varningen anger att noden som skickas till funktionen kan vara null.

  4. Du korrigerar den här varningen genom att använda en if-instruktion i början av funktionen för att testa det angivna värdet. Koden bör likna följande kod:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. På menyn Skapa väljer du Kör kodanalys på lösning.

    Projektet byggs nu utan varningar eller fel.

Se även

Genomgång: Analysera hanterad kod för kodfel
Kodanalys för C/C++