Wybór narzędzia do analizy kodu statycznego [zamknięty]

Pracuję nad projektem, w którym koduję w C w środowisku UNIX. Używam narzędzia lint do sprawdzania kodu źródłowego. Lint istnieje już od dłuższego czasu( od 1979 roku), czy ktoś może zasugerować nowsze narzędzie do analizy kodu, którego mógłbym użyć ? Najlepiej narzędzie, które jest bezpłatne.

Author: David, 2008-08-06

15 answers

Nie przeocz samego kompilatora.

Przeczytaj dokumentację kompilatora i znajdź wszystkie ostrzeżenia i błędy, które może dostarczyć, a następnie włącz tyle, ile ma to dla Ciebie sensu.

Upewnij się również, że Twój kompilator traktuje ostrzeżenia jak błędy, więc jesteś zmuszony od razu je naprawić. ("- Werror " na gcc)

Również: "- Wall " na gcc nie włącza nie włącza wszystkich ostrzeżeń, nie daj się zwieść.

Również: Sprawdź valgrind (za darmo!)- to " automatycznie wykrywa [s] wiele błędów związanych z zarządzaniem pamięcią i tworzeniem wątków oraz szczegółowo profilowane programy."

Valgrind nie jest kontrolerem statycznym, ale to świetne narzędzie! http://valgrind.org

 30
Author: svec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 22:17:24

Dla kodu C zdecydowanie powinieneś użyć Flexelint . Używałem go przez prawie 15 lat i przysięgam na niego. Jedną z naprawdę świetnych funkcji jest to, że ostrzeżenia mogą być selektywnie wyłączane i włączane za pomocą komentarzy w kodzie ("/*lint-E123*/"). Okazało się to potężnym narzędziem do dokumentacji, gdy chciałeś zrobić coś niezwykłego. "Wyłączam warning X, dlatego jest jakiś dobry powód, dla którego robię X."

Dla każdego ciekawego C / C++ pytania, spójrz na niektóre z ich przykładów na ich stronie i sprawdź, czy możesz dowiedzieć się o błędach bez patrzenia na wskazówki.

 14
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 21:42:22

Słyszałem dobre rzeczy o clang static analyzer , który IIRC używa LLVM jako zaplecza. Jeśli jest to zaimplementowane na twojej platformie, może to być dobry wybór.

Z tego co rozumiem, robi to coś więcej niż tylko analiza składniowa. Na przykład" automatyczne wyszukiwanie błędów".

 12
Author: Matthew Schinckel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-21 14:28:40

Używamy Coverity Prevent do sprawdzania kodu źródłowego C++.

Nie jest to darmowe narzędzie (chociaż wierzę, że oferują bezpłatne skanowanie projektów open source), ale jest to jedno z najlepszych narzędzi do analizy statycznej, jakie znajdziesz. Słyszałem, że jest jeszcze bardziej imponujące na C niż na C++, ale to pomogło nam uniknąć sporo błędów do tej pory.

 5
Author: Kristof Provost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 17:47:21

Niedawno sporządziłem listę wszystkich narzędzi do analizy statycznej, które miałem do dyspozycji, wciąż jestem w trakcie ich oceny. Uwaga, są to głównie narzędzia do analizy bezpieczeństwa.

 5
Author: David Bryson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-03 22:11:19

Możesz użyć cppcheck. Jest to łatwe w użyciu narzędzie do analizy statycznej kodu.
na przykład:
cppcheck --enable=all .
sprawdzi wszystkie pliki C / C++ w bieżącym folderze.

 5
Author: Nicolas Jean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 15:54:11

Narzędzia podobne do Lint zazwyczaj cierpią z powodu problemu "fałszywego alarmu": zgłaszają o wiele więcej problemów niż naprawdę istnieją. Jeśli odsetek naprawdę użytecznych ostrzeżeń jest zbyt niski, użytkownik uczy się ignorować narzędzie. Bardziej nowoczesne narzędzia poświęcają trochę wysiłku, aby skupić się na najbardziej prawdopodobnych/interesujących ostrzeżeniach.

 1
Author: Chris Conway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 14:21:05

PC-lint/Flexelint są bardzo potężnymi i użytecznymi narzędziami do analizy statycznej i wysoce konfigurowalnymi, choć niestety nie darmowymi.

Kiedy po raz pierwszy użyją takiego narzędzia, mogą wytwarzać ogromną liczbę ostrzeżeń, co może utrudnić rozróżnienie między głównymi i podrzędnymi. Dlatego najlepiej zacząć używać tego narzędzia na swoim kodzie tak wcześnie, jak to możliwe w projekcie, a następnie uruchamiać je tak często, jak to możliwe, aby móc radzić sobie z nowymi ostrzeżeniami w górę.

Dzięki takiemu ciągłemu użyciu szybko nauczysz się pisać kod w sposób, który potwierdza reguły stosowane przez narzędzie.

Z tego powodu wolę narzędzia takie jak Lint, które działają stosunkowo szybko, a więc zachęcają do ciągłego używania, a nie bardziej uciążliwe narzędzia, które mogą skończyć się za pomocą rzadziej, jeśli w ogóle.

 1
Author: Steve Melnikoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-19 23:29:54

Możesz wypróbować CppDepend , całkiem kompletny analizator statyczny dostępny w systemach windows i linux, poprzez wtyczkę VS, IDE lub wiersz poleceń, i jest bezpłatny dla open source contributors

 1
Author: Dane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-26 12:01:12

Może okazać się przydatne narzędzie Uno . To jedna z niewielu darmowych opcji bez zabawek. Różni się od lint, Flexelint itp. skupiając się na niewielkiej liczbie "semantycznych" błędów (derefów wskaźników zerowych, indeksów tablic poza granicami i użycia niezainicjalizowanych zmiennych). Umożliwia również definiowane przez użytkownika kontrole, takie jak blokada-odblokowanie dyscypliny.

Pracuję nad publicznym wydaniem następcy narzędzia, Orion (CONTENT NOT AVAILABLE ANYMORE )

 1
Author: Chris Conway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-30 12:43:30

Istnieje opcja"- weffc++ " dla gcc, która zgodnie ze stroną podręcznika Mac OS X będzie:

Ostrzegaj przed naruszeniem następujących wytycznych stylu z efektywnej książki Scotta Meyersa C++:

[snip]

Wiem, że pytałeś o C, ale to jest najbliższe, o którym wiem..

 0
Author: pauldoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 22:03:12

Lint {[2] } jest stale aktualizowana... więc po co Ci nowszy?

BTW flexelint is lint

 0
Author: itj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-23 11:42:30

G ' Day,

Całkowicie zgadzam się z sugestiami, aby przeczytać i przetrawić to, co mówi kompilator po ustawieniu-Wall.

Dobrym narzędziem analizy statycznej dla bezpieczeństwa jest FlawFinder napisany przez Davida Wheelera. Robi dobrą robotę szukając różnych exploitów bezpieczeństwa,

Nie zastępuje jednak posiadania kogoś, kto zna się na czytaniu Twojego kodu. Jak mówi Dawid na swojej stronie internetowej, " głupiec z narzędziem jest nadal głupcem!"

Pozdrawiam,

Rob

 0
Author: Rob Wells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 15:21:28

Odkryłem, że ogólnie najlepiej jest użyć wielu narzędzi do analizy statycznej, aby znaleźć błędy. Każde narzędzie jest zaprojektowane inaczej i mogą znaleźć bardzo różne rzeczy od siebie.

Są dobre dyskusje w niektórych rozmowach TUTAJ . To z konferencji zorganizowanej przez Departament Bezpieczeństwa Wewnętrznego USA na temat analizy statycznej.

 0
Author: Dominic Gurto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-15 06:53:42

Sparse jest oprogramowaniem komputerowym, dostępnym już na Linuksie, zaprojektowanym w celu znalezienia możliwych błędów kodowania w jądrze Linuksa.

Istnieją dwa aktywne projekty Linux Verification Center mające na celu poprawę jakości ładowanych modułów jądra.

  1. Linux Driver Verification (LDV) - kompleksowy zestaw narzędzi do statycznej weryfikacji kodu źródłowego sterowników urządzeń Linuksowych.
  2. KEDR Framework-rozszerzalny framework do analizy dynamicznej i weryfikacja modułów jądra.
  3. kolejnym trwającym projektem jest Linux File System Verification, którego celem jest opracowanie dedykowanego zestawu narzędzi do weryfikacji implementacji linuksowego systemu plików.
 0
Author: manav m-n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-20 07:36:49