Przewodnik: analizowanie kodu C/C++ pod kątem wad

W tym przewodniku pokazano, jak analizować kod C/C++ pod kątem potencjalnych wad kodu. Używa on narzędzi do analizy kodu dla kodu C/C++.

W tym przewodniku wykonasz następujące kroki:

  • Uruchamianie analizy kodu w kodzie natywnym.
  • Analizowanie ostrzeżeń o wadach kodu.
  • Traktuj ostrzeżenie jako błąd.
  • Dodawanie adnotacji do kodu źródłowego w celu ulepszenia analizy wad kodu.

Wymagania wstępne

  • Kopia przykładu CppDemo.
  • Podstawowa wiedza na temat języka C/C++.

Uruchamianie analizy kodu w kodzie natywnym

Aby uruchomić analizę wad kodu w kodzie natywnym

  1. Otwórz rozwiązanie CppDemo w programie Visual Studio.

    Rozwiązanie CppDemo wypełnia teraz Eksplorator rozwiązań.

  2. W menu Kompilacja wybierz pozycję Skompiluj rozwiązanie.

    Rozwiązanie jest kompilowanie bez żadnych błędów ani ostrzeżeń.

  3. W Eksplorator rozwiązań wybierz projekt CodeDefects.

  4. W menu Projekt wybierz pozycję Właściwości.

    Zostanie wyświetlone okno dialogowe Strony właściwości CodeDefects.

  5. Wybierz stronę właściwości Analiza kodu.

  6. Zmień właściwość Enable Code Analysis on Build na Tak. Wybierz przycisk OK , aby zapisać zmiany.

  7. Skompiluj projekt CodeDefects.

    Ostrzeżenia dotyczące analizy kodu są wyświetlane w oknie Lista błędów.

  1. Otwórz rozwiązanie CppDemo w programie Visual Studio.

    Rozwiązanie CppDemo wypełnia teraz Eksplorator rozwiązań.

  2. W menu Kompilacja wybierz pozycję Skompiluj rozwiązanie.

    Rozwiązanie jest kompilowanie bez żadnych błędów ani ostrzeżeń.

    Uwaga

    W programie Visual Studio 2017 w a aparatze IntelliSense może zostać wyświetlone fałszywe ostrzeżenie E1097 unknown attribute "no_init_all" . Możesz bezpiecznie zignorować to ostrzeżenie.

  3. W Eksplorator rozwiązań wybierz projekt CodeDefects.

  4. W menu Projekt wybierz pozycję Właściwości.

    Zostanie wyświetlone okno dialogowe Strony właściwości CodeDefects.

  5. Wybierz stronę właściwości Analiza kodu.

  6. Zaznacz pole wyboru Włącz analizę kodu w kompilacji. Wybierz przycisk OK , aby zapisać zmiany.

  7. Skompiluj projekt CodeDefects.

    Ostrzeżenia dotyczące analizy kodu są wyświetlane w oknie Lista błędów.

Aby przeanalizować ostrzeżenia o wadach kodu

  1. W menu Widok wybierz pozycję Lista błędów.

    Ten element menu może nie być widoczny. Zależy to od profilu dewelopera wybranego w programie Visual Studio. Może być konieczne wskazanie pozycji Inne okna w menu Widok , a następnie wybranie pozycji Lista błędów.

  2. W oknie Lista błędów kliknij dwukrotnie następujące ostrzeżenie:

    C6230: Niejawne rzutowanie między semantycznie różnymi typami: używanie hrESULT w kontekście logicznym.

    Edytor kodu wyświetla wiersz, który spowodował ostrzeżenie wewnątrz funkcji bool ProcessDomain(). To ostrzeżenie wskazuje, że element jest używany w instrukcji "if", HRESULT w której oczekiwano wyniku logicznego. Zazwyczaj jest to błąd, ponieważ gdy S_OK funkcja HRESULT jest zwracana z funkcji, wskazuje powodzenie, ale po przekonwertowaniu na wartość logiczną oblicza wartość .false

  3. Popraw to ostrzeżenie, używając makra SUCCEEDED , które konwertuje na true wartość zwracaną HRESULT , gdy wartość zwracana wskazuje powodzenie. Kod powinien przypominać następujący kod:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Na liście błędów kliknij dwukrotnie następujące ostrzeżenie:

    C6282: Nieprawidłowy operator: przypisanie stałej w kontekście logicznym. Zamiast tego rozważ użycie '=='.

  5. Popraw to ostrzeżenie, testując równość. Kod powinien wyglądać podobnie do następującego kodu:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Popraw pozostałe ostrzeżenia C6001 na liście błędów, inicjując i i j do 0.

  7. Skompiluj projekt CodeDefects.

    Projekt kompiluje się bez żadnych ostrzeżeń ani błędów.

Poprawianie ostrzeżeń adnotacji kodu źródłowego

Aby włączyć ostrzeżenia adnotacji kodu źródłowego w adnotacji.c

  1. W Eksplorator rozwiązań wybierz projekt Adnotacje.

  2. W menu Projekt wybierz pozycję Właściwości.

    Zostanie wyświetlone okno dialogowe Strony właściwości Adnotacje.

  3. Wybierz stronę właściwości Analiza kodu.

  4. Zmień właściwość Enable Code Analysis on Build na Tak. Wybierz przycisk OK , aby zapisać zmiany.

  1. W Eksplorator rozwiązań wybierz projekt Adnotacje.

  2. W menu Projekt wybierz pozycję Właściwości.

    Zostanie wyświetlone okno dialogowe Strony właściwości Adnotacje.

  3. Wybierz stronę właściwości Analiza kodu.

  4. Zaznacz pole wyboru Włącz analizę kodu w kompilacji. Wybierz przycisk OK , aby zapisać zmiany.

Aby poprawić ostrzeżenia adnotacji kodu źródłowego w adnotacji.c

  1. Ponownie skompiluj projekt Adnotacje.

  2. W menu Kompilacja wybierz pozycję Uruchom analizę kodu w adnotacjach.

  3. Na liście błędów kliknij dwukrotnie następujące ostrzeżenie:

    C6011: Wyłuszczenie wskaźnika NULL "newNode".

    To ostrzeżenie wskazuje błąd przez obiekt wywołujący w celu sprawdzenia wartości zwracanej. W takim przypadku wywołanie metody AllocateNode może zwrócić wartość NULL. Zobacz plik nagłówka annotations.h dla deklaracji funkcji .AllocateNode

  4. Kursor znajduje się w lokalizacji w pliku annotations.cpp, w którym wystąpiło ostrzeżenie.

  5. Aby poprawić to ostrzeżenie, użyj instrukcji "if", aby przetestować wartość zwracaną. Kod powinien przypominać następujący kod:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Ponownie skompiluj projekt Adnotacje.

    Projekt kompiluje się bez żadnych ostrzeżeń ani błędów.

Użyj adnotacji kodu źródłowego, aby dowiedzieć się więcej problemów

Aby użyć adnotacji kodu źródłowego

  1. Dodaj adnotacje do parametrów formalnych i zwracaną wartość funkcji AddTail , aby wskazać, że wartości wskaźnika mogą mieć wartość null:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. W menu Kompilacja wybierz pozycję Uruchom analizę kodu w rozwiązaniu.

  3. Na liście błędów kliknij dwukrotnie następujące ostrzeżenie:

    C6011: Wyłuszczenie wskaźnika NULL "node".

    To ostrzeżenie wskazuje, że węzeł przekazany do funkcji może mieć wartość null.

  4. Aby poprawić to ostrzeżenie, użyj instrukcji "if" na początku funkcji, aby przetestować przekazaną wartość. Kod powinien przypominać następujący kod:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. W menu Kompilacja wybierz pozycję Uruchom analizę kodu w rozwiązaniu.

    Projekt jest teraz kompiluje bez żadnych ostrzeżeń ani błędów.

Zobacz też

Przewodnik: Analizowanie kodu zarządzanego pod kątem defektów
Analiza kodu dla języka C/C++