Návod: Analýza defektů v kódu C/C++
Tento názorný postup ukazuje, jak analyzovat kód C/C++ z možných defektů 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 na nativním kódu.
- Analýza upozornění na chyby kódu
- Považovat upozornění za chybu.
- Anotace zdrojového kódu za účelem vylepšení analýzy defektů kódu
Požadavky
- Kopie ukázky CppDemo.
- Základní znalost jazyka C/C++.
Spuštění analýzy kódu na nativním kódu
Spuštění analýzy defektů kódu v nativním kódu
Otevřete řešení CppDemo v 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 Project zvolte Vlastnosti.
Zobrazí se dialogové okno CodeDefects – stránky vlastností.
Vyberte stránku Code Analysis vlastností.
Vlastnost Enable Code Analysis on Build (Povolit u sestavení) změňte na Yes (Ano). Zvolte OK a uložte změny.
Znovu sestavte projekt CodeDefects.
Upozornění analýzy kódu se zobrazí v okně Seznam chyb kódu.
Otevřete řešení CppDemo v 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 Visual Studio 2017 se může v modulu IntelliSense zobrazit
E1097 unknown attribute "no_init_all"neschválené upozornění. Toto upozornění můžete klidně ignorovat.V Průzkumník řešenívyberte projekt CodeDefects.
V nabídce Project zvolte Vlastnosti.
Zobrazí se dialogové okno CodeDefects – stránky vlastností.
Vyberte stránku Code Analysis vlastností.
Zaškrtněte políčko Enable Code Analysis on Build (Povolit Code Analysis při sestavení). Zvolte OK a uložte změny.
Znovu sestavte projekt CodeDefects.
Upozornění analýzy kódu se zobrazí v okně Seznam chyb kódu.
Analýza upozornění na chyby kódu
V nabídce View (Zobrazení) zvolte Seznam chyb.
Tato položka nabídky nemusí být viditelná. Závisí na profilu vývojáře, který jste zvolili v Visual Studio. V nabídce View (Zobrazení) Windows naOther Windows (Jiné) a pak zvolte Seznam chyb.
V Seznam chyb klikněte dvakrát na následující upozornění:
C6230: Implicitní přetypování mezi sémanticky různými typy: použití hodnoty HRESULT v logickém kontextu
Editor kódu zobrazí řádek, který způsobil upozornění uvnitř funkce
bool ProcessDomain(). Toto upozornění indikuje, že se v příkazu if používá ,HRESULTkde se očekává logický výsledek. Obvykle se jedná o chybu, protože když se vrátí hodnota HRESULT z funkce, znamená to úspěch, ale při převodu na logickou hodnotu se vyhodnotíS_OKjakofalse.Opravte toto upozornění pomocí makra, které se převede na
SUCCEEDEDtrue, kdyžHRESULTnávratová hodnota indikuje úspěch. Váš kód by měl vypadat podobně jako následující kód:if (SUCCEEDED(ReadUserAccount()))V Seznam chybpoklikejte na následující upozornění:
C6282: Nesprávný operátor: přiřazení konstanty v logickém kontextu. Zvažte místo toho použití ==.
Opravte toto upozornění testováním rovnosti. 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 Seznam chyb inicializací a na hodnotu
j0.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 ke zdrojovému kódu v anotaci.c
V Průzkumník řešení vyberte projekt Poznámky.
V nabídce Project zvolte Vlastnosti.
Zobrazí se dialogové okno Stránky vlastností poznámek.
Vyberte stránku Code Analysis vlastností.
Vlastnost Enable Code Analysis on Build (Povolit u sestavení) změňte na Yes (Ano). Zvolte OK a uložte změny.
V Průzkumník řešení vyberte projekt Poznámky.
V nabídce Project zvolte Vlastnosti.
Zobrazí se dialogové okno Stránky vlastností poznámek.
Vyberte stránku Code Analysis vlastností.
Zaškrtněte políčko Enable Code Analysis on Build (Povolit Code Analysis při sestavení). Zvolte OK a uložte změny.
Oprava upozornění poznámek ke zdrojovému kódu v souboru annotation.c
Znovu sestavte projekt Poznámek.
V nabídce Build (Sestavení) zvolte Run Code Analysis on Annotations(Spustit poznámky).
V Seznam chybpoklikejte na následující upozornění:
C6011: Derefererování ukazatele NULL 'newNode'.
Toto upozornění značí selhání volajícího při kontrole návratové hodnoty. V takovém případě může volání
AllocateNodevrátit hodnotu NULL. Prohlédněte si soubor hlaviček annotations.h pro deklaraci funkceAllocateNodepro .Kurzor je na umístění v souboru annotations.cpp, kde došlo k upozornění.
Pokud chcete toto upozornění opravit, otestujte vrácenou hodnotu pomocí příkazu "if". Váš kód by měl vypadat podobně jako následující kód:
LinkedList* newNode = AllocateNode(); if (nullptr != newNode) { newNode->data = value; newNode->next = 0; node->next = newNode; }Znovu sestavte projekt Poznámek.
Projekt se sestaví bez upozornění nebo chyb.
Použití poznámky ke zdrojovému kódu ke zjištění dalších problémů
Použití poznámky ke zdrojovému kódu
Anotace formálních parametrů a návratové hodnoty funkce k označení hodnot
AddTailukazatele může být null:_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)V nabídce Build (Sestavení) zvolte Run Code Analysis on Solution (Spustit Code Analysis v řešení).
V Seznam chybpoklikejte na následující upozornění:
C6011: Derefererování ukazatele NULL 'node'.
Toto upozornění značí, že uzel předaný do funkce může mít hodnotu null.
Pokud chcete toto upozornění opravit, otestujte předanou hodnotu pomocí příkazu "if" na začátku funkce. Váš kód by měl vypadat podobně jako následující kód:
if (nullptr == node) { return nullptr; }V nabídce Build (Sestavení) zvolte Run Code Analysis on Solution (Spustit Code Analysis v řešení).
Projekt se teď sestaví bez jakýchkoli 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++