Sdílet prostřednictvím


Návod: Analýza kódu C/C++ pro vady

Tento názorný postup ukazuje, jak analyzovat kód C/C++ pro potenciální chyby kódu. Používá nástroje pro analýzu kódu pro kód C/C++.

V tomto názorném postupu:

  • Spusťte analýzu kódu v nativním kódu.
  • Analyzujte upozornění na chyby kódu.
  • Považovat upozornění za chybu
  • Přidávání poznámek ke zdrojovému kódu za účelem zlepšení analýzy chyb kódu

Požadavky

  • Kopie ukázky CppDemo.
  • Základní znalost jazyka C/C++.

Spuštění analýzy kódu v nativním kódu

Spuštění analýzy vad kódu v nativním kódu

  1. Otevřete řešení CppDemo v sadě Visual Studio.

    Řešení CppDemo teď naplní Průzkumník řešení.

  2. V nabídce Sestavení zvolte Znovu sestavit řešení.

    Řešení se sestaví bez chyb nebo upozornění.

  3. V Průzkumník řešení vyberte projekt CodeDefects.

  4. V nabídce Projekt zvolte Vlastnosti.

    Zobrazí se dialogové okno Stránky vlastností CodeDefects.

  5. Vyberte stránku vlastností Analýza kódu.

  6. Změňte vlastnost Povolit analýzu kódu při sestavení na Ano. Kliknutím na OK uložte provedené změny.

  7. Znovu sestavte projekt CodeDefects.

    Upozornění analýzy kódu se zobrazují v okně Seznam chyb.

  1. Otevřete řešení CppDemo v sadě Visual Studio.

    Řešení CppDemo teď naplní Průzkumník řešení.

  2. V nabídce Sestavení zvolte Znovu sestavit řešení.

    Řešení se sestaví bez chyb nebo upozornění.

    Poznámka:

    V sadě Visual Studio 2017 se v modulu IntelliSense může zobrazit upozornění E1097 unknown attribute "no_init_all" . Toto upozornění můžete klidně ignorovat.

  3. V Průzkumník řešení vyberte projekt CodeDefects.

  4. V nabídce Projekt zvolte Vlastnosti.

    Zobrazí se dialogové okno Stránky vlastností CodeDefects.

  5. Vyberte stránku vlastností Analýza kódu.

  6. Zaškrtněte políčko Povolit analýzu kódu při sestavení. Kliknutím na OK uložte provedené změny.

  7. Znovu sestavte projekt CodeDefects.

    Upozornění analýzy kódu se zobrazují v okně Seznam chyb.

Analýza upozornění na chyby kódu

  1. V nabídce Zobrazení zvolte Seznam chyb.

    Tato položka nabídky nemusí být viditelná. Závisí na profilu vývojáře, který jste zvolili v sadě Visual Studio. Je možné, že budete muset v nabídce Zobrazení nasměrovat na jiný systém Windows a pak zvolit Seznam chyb.

  2. V okně Seznam chyb poklikejte na následující upozornění:

    C6230: Implicitní přetypování mezi sémanticky odlišnými typy: pomocí funkce HRESULT v logickém kontextu

    Editor kódu zobrazí řádek, který způsobil upozornění uvnitř funkce bool ProcessDomain(). Toto upozornění označuje, že HRESULT se používá v příkazu if, kde se očekává logický výsledek. Obvykle se jedná o chybu, protože když S_OK je hodnota HRESULT vrácena z funkce, značí úspěch, ale při převodu na logickou hodnotu se vyhodnotí jako false.

  3. Opravte toto upozornění pomocí SUCCEEDED makra, které se převede na true , když návratová HRESULT hodnota indikuje úspěch. Váš kód by měl vypadat přibližně takto:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. V seznamu chyb poklikejte na následující upozornění:

    C6282: Nesprávný operátor: přiřazení konstanty v logickém kontextu Místo toho zvažte použití ==.

  5. Opravte toto upozornění testováním rovnosti. Váš kód by měl vypadat podobně jako následující kód:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Opravte zbývající upozornění C6001 v seznamu chyb inicializací i a j 0.

  7. Znovu sestavte projekt CodeDefects.

    Projekt se sestaví bez upozornění nebo chyb.

Oprava upozornění poznámek ke zdrojovému kódu

Povolení upozornění poznámek zdrojového kódu v annotation.c

  1. V Průzkumník řešení vyberte projekt Poznámky.

  2. V nabídce Projekt zvolte Vlastnosti.

    Zobrazí se dialogové okno Stránky vlastností poznámek.

  3. Vyberte stránku vlastností Analýza kódu.

  4. Změňte vlastnost Povolit analýzu kódu při sestavení na Ano. Kliknutím na OK uložte provedené změny.

  1. V Průzkumník řešení vyberte projekt Poznámky.

  2. V nabídce Projekt zvolte Vlastnosti.

    Zobrazí se dialogové okno Stránky vlastností poznámek.

  3. Vyberte stránku vlastností Analýza kódu.

  4. Zaškrtněte políčko Povolit analýzu kódu při sestavení. Kliknutím na OK uložte provedené změny.

Oprava upozornění poznámek ke zdrojovému kódu v annotation.c

  1. Znovu sestavte projekt Poznámky.

  2. V nabídce Sestavení zvolte Spustit analýzu kódu v poznámkách.

  3. V seznamu chyb poklikejte na následující upozornění:

    C6011: Dereferencing NULL ukazatel 'newNode'.

    Toto upozornění indikuje selhání volajícím, aby zkontroloval vrácenou hodnotu. V takovém případě může volání AllocateNode vrátit hodnotu NULL. Viz soubor záhlaví anotace.h pro deklaraci funkce pro AllocateNode.

  4. Kurzor je na umístění v souboru annotations.cpp, kde došlo k upozornění.

  5. Chcete-li toto upozornění opravit, použijte příkaz if k otestování návratové hodnoty. Váš kód by měl vypadat přibližně takto:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Znovu sestavte projekt Poznámky.

    Projekt se sestaví bez upozornění nebo chyb.

Použití poznámek ke zdrojovému kódu ke zjištění dalších problémů

Použití poznámky ke zdrojovému kódu

  1. Poznámkami k formálním parametrům a návratové hodnotě funkce AddTail označující hodnoty ukazatele mohou být null:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. V nabídce Sestavení zvolte Spustit analýzu kódu v řešení.

  3. V seznamu chyb poklikejte na následující upozornění:

    C6011: Dereferencing null ukazatel 'node'.

    Toto upozornění značí, že uzel předaný funkci může mít hodnotu null.

  4. Chcete-li toto upozornění opravit, použijte příkaz if na začátku funkce k otestování předané hodnoty. Váš kód by měl vypadat přibližně takto:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. V nabídce Sestavení zvolte Spustit analýzu kódu v řešení.

    Projekt se teď sestaví bez upozornění nebo chyb.

Viz také

Návod: Analýza spravovaného kódu na výskyt závad v kódu
Analýza kódu pro C/C++