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
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
Otevřete řešení CppDemo v sadě Visual Studio.
Řešení CppDemo teď naplní Průzkumník řešení.
V nabídce Sestavení zvolte Znovu sestavit řešení.
Řešení se sestaví bez chyb nebo upozornění.
V Průzkumník řešení vyberte projekt CodeDefects.
V nabídce Projekt zvolte Vlastnosti.
Zobrazí se dialogové okno Stránky vlastností CodeDefects.
Vyberte stránku vlastností Analýza kódu.
Změňte vlastnost Povolit analýzu kódu při sestavení na Ano. Kliknutím na OK uložte provedené změny.
Znovu sestavte projekt CodeDefects.
Upozornění analýzy kódu se zobrazují v okně Seznam chyb.
Otevřete řešení CppDemo v sadě Visual Studio.
Řešení CppDemo teď naplní Průzkumník řešení.
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.V Průzkumník řešení vyberte projekt CodeDefects.
V nabídce Projekt zvolte Vlastnosti.
Zobrazí se dialogové okno Stránky vlastností CodeDefects.
Vyberte stránku vlastností Analýza kódu.
Zaškrtněte políčko Povolit analýzu kódu při sestavení. Kliknutím na OK uložte provedené změny.
Znovu sestavte projekt CodeDefects.
Upozornění analýzy kódu se zobrazují v okně Seznam chyb.
Analýza upozornění na chyby kódu
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.
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, žeHRESULT
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í jakofalse
.Opravte toto upozornění pomocí
SUCCEEDED
makra, které se převede natrue
, když návratováHRESULT
hodnota indikuje úspěch. Váš kód by měl vypadat přibližně takto:if (SUCCEEDED(ReadUserAccount()))
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í ==.
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'\\'))
Opravte zbývající upozornění C6001 v seznamu chyb inicializací
i
aj
0.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
V Průzkumník řešení vyberte projekt Poznámky.
V nabídce Projekt zvolte Vlastnosti.
Zobrazí se dialogové okno Stránky vlastností poznámek.
Vyberte stránku vlastností Analýza kódu.
Změňte vlastnost Povolit analýzu kódu při sestavení na Ano. Kliknutím na OK uložte provedené změny.
V Průzkumník řešení vyberte projekt Poznámky.
V nabídce Projekt zvolte Vlastnosti.
Zobrazí se dialogové okno Stránky vlastností poznámek.
Vyberte stránku vlastností Analýza kódu.
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
Znovu sestavte projekt Poznámky.
V nabídce Sestavení zvolte Spustit analýzu kódu v poznámkách.
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 proAllocateNode
.Kurzor je na umístění v souboru annotations.cpp, kde došlo k upozornění.
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; }
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
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)
V nabídce Sestavení zvolte Spustit analýzu kódu v řešení.
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.
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; }
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++