Przydatne narzędzia przy sprawdzaniu i rozwijaniu kodu C/C++(i nie tylko)
Zapewne wielu z was spotkało się z błędami, które mimo, że były proste do naprawienia(np. copy-paste bugs) to kryły się w kodzie przez miesiące lub lata zanim zostały naprawione. Rozwiązaniem tych problemów w wielu przypadkach są statyczne i dynamiczne analizatory kodu oraz programy...
q.....n z- #
- #
- #
- #
- #
- #
- 66
Komentarze (66)
najlepsze
2. valgrind zawsze prawdę ci powie i to narzędzie jest godne polecenia niemniej może być kłopotliwe w użyciu na niektórych platformach (np problem z offsetami na malince)
3. scan-build wiele przegapić może, choć ładne raporty generuje
4. coverity jest rzeczywiście dobre (piszę o komercyjnej wersji), każdy początkujący programista powinien przetrzepać swój projekt tym narzędziem a wiele przemyśleń może zyskać.
Niezależnie czy te
@ObserwatorZamieszania: Parę razy mi nie zadziałał :-/ zarezerwowałem jakąś pamięć (dynamicznie), przekazałem wskaźnik przez argument do jakiejś funkcji, wewnątrz tej funkcji zrobiłem buffer overflow i niestety valgrind mi to przegapił :-/ W C/C++ argumenty przekazuje się przez kopię, może dlatego valgrind się pogubił. Pewno
Jeśli w dynamicznie alokowanym obiekcie masz statyczną tablicę, to valgrindowy memcheck nie wyłapie błędu dopóki nie zaczniesz pisać za tym obiektem, a nie za tablicą. Istnieje w valgrindzie narzędzie do wykrywania tego typu błędów na stosie, ale jest jeszcze w fazie eksperymentalnej.
-Wall -Wextra -pedantic
@Boska_Klaudia: to akurat jak trzymasz się jakiegoś standardu. Ale tak, dobry koder korzysta z podpowiedzi kompilatora.
@ObserwatorZamieszania: srowcy chyba, w Linuksie ma nie być żadnych warningów i to nie ma zostać osiągnięty poprzez takie wybieranie takich opcji compilera żeby nie wyrzucał warningów
- Wsparcie dla CppCheck, ASAN, UBSAN, Valgrind i ClangTidy
- Jest to otwarta wtyczka
Czyli dzięki temu mamy przy pomocy ładnego UI wszystkie raporty w jednym miejscu i można zarządzać śmieciowymi raportami, bo i takie się znajdą.
Jakbym miał wybrać jedno narzędzie dzięki któremu złapaliśmy najwięcej rzeczy to
Dobra lista. Dorzuciłbym jeszcze do tego kilka dość świeżych i nieco mniej znanych tooli dostarczanych przez gcc i clanga:
- LibFuzzer oferowany przez clanga od wersji 6.0 z dość dużymi możliwościami: https://www.youtube.com/watch?v=k-Cv8Q3zWNQ, szczególnie przydatny do testowania wszelkiego rodzaju bibliotek, API itp. Fuzzing jako technika ma ogromny potencjał do znajdowania bugów co zresztą pokazał już Syzkaller w jajku: https://lwn.net/Articles/677764/
- static analyzery takie jak dostępny od jakiegoś czasu zestaw checkerów dla
A jak podepniesz rtagsy, to jeszcze sam poprawi część błędów.
Sprawdzę sobie w weekend czy resztę też można powiązać.