2010-08-11 13 views
12

Chciałbym zobaczyć mały, ale kompletny fragment kodu, który spowoduje, że narzędzie statyczne Clanga będzie narzekać. Moja motywacja polega głównie na tym, że staram się zmusić go do pracy nad moim kodem PIC32, i potrzebuję sposobu na rozróżnienie między "całym kodem jest w porządku" i "w rzeczywistości nic nie robi". Jest to również po części ciekawość, ponieważ sam nie potrafię wymyślić prostego przykładu.Przykładowy kod wyzwalający analizator statyczny Clanga

C89/ANSI lub C99 jest w porządku, a najlepiej, jeśli chciałbym, aby wykrył prosty wyciek pamięci. Moja użycie jest

clang --analyze test.c 

Odpowiedz

11

znalazłem „błąd” w moim kodu (tylko jeden ;-) który wywołuje przez to, co nie jest wykrywany przez -Wall. Ugotowałem go do następnej:

Jest to stosunkowo prosta implementacja połączonej listy, ale nie jest to tutaj ważne. Zmienna myhead nie jest używana we wspólnej aplikacji, ale dla kompilatora jest używana, ponieważ wewnątrz inicjalizatora jest pobierany adres pola.

clang poprawnie analizuje to jako

/tmp 11:58 <722>% clang --analyze test-clang.c 
test-clang.c:25:15: warning: Value stored to 'myhead' during its initialization is never read 
    struct head myhead = HEAD_INITIALIZER(myhead); 
      ^  ~~~~~~~~~~~~~~~~~~~~~~~~ 
1 diagnostic generated. 

Edit: Znalazłem jeszcze jeden, który również wykrywa proliferacji pamici stos

char const* myBuggyFunction(void) { 
    return (char[len + 1]){ 0 }; 
} 

To nie jest wykrywany przez gcc, open64 lub clang z -Wall, ale przez clang z --analyze.

+0

Czy praca, dzięki :) Muszę powiedzieć, że wymyśliłem najbardziej oczywiste i najbardziej twórcze krwawe wycieki pamięci, jakie mogłem wymyślić, i pozwoliłbym wszystkim przejść. Najwyraźniej wie wystarczająco dużo, aby wiedzieć, że testowałem to. – detly

+0

@detly: było zabawne, nauczyłem się krzyczeć przez to :) dla mojej ciekawości czym są przecieki w kontekście analizy statycznej? –

+0

Cóż, nie jestem w 100% pewny, ale miałem wrażenie, że wiele narzędzi do analizy statycznej, w tym klang, może wykryć potencjalne problemy z pamięcią w czasie pracy (takie jak 'p = malloc (...); p = q;') . Mogę się mylić. – detly

Powiązane problemy