Vă mulțumim pentru susținere

Alegerea unui instrument static de analiză a codului

Lucrez la un proiect în care cod în C într-un mediu UNIX. Am folosit instrumentul de scame pentru a verifica codul sursă. Lint a fost în jur de mult timp (din 1979), poate cineva să sugereze un instrument mai recent de analiză a codului pe care aș putea să-l folosesc? De preferință, un instrument care este gratuit.

0
adăugat
Consultați și Care este cea mai bună linie de comandă instrument de curățare a codului și opțiuni de avertizare GCC recomandate pentru C . Dacă aveți prototipuri centralizate corespunzător în anteturi și utilizate peste tot, atunci verificarea fișierului încrucișat care lint se face este de asemenea făcută de compilator (deși un fișier la un moment dat).
adăugat autor Jonathan Leffler
Votarea pentru închidere ca rec.
adăugat autor Ciro Santilli 包子露宪 六四事件 法轮功

15 răspunsuri

Pentru codul C, trebuie cu siguranță să utilizați Flexelint . L-am folosit timp de aproape 15 ani și jur de asta. Una dintre caracteristicile foarte bune pe care le are este ca avertismentele pot fi dezactivate selectiv și prin intermediul comentariilor din cod ("/ * lint -e123 * /"). Acest lucru sa dovedit a fi un instrument puternic de documentare atunci când ați vrut să ceva neobișnuit. "Am oprit avertismentul X, prin urmare, există un motiv bun pentru care fac X."

Pentru oricine în întrebări interesante despre C / C ++, uitați-vă la câteva din exemplele pe care le găsiți pe site-ul dvs. și vedeți dacă puteți afla bug-urile fără a vă uita la sugestii.

0
adăugat
@nwp, nu aș spune că este scump. La un singur loc de cost de 1000 $ (unix) sau 400 $ (ferestre), probabil, se plătește pentru sine cu o singură problemă client.
adăugat autor Mark Harrison
Flexelint este ridicol de costisitor.
adăugat autor nwp

Am auzit lucruri bune despre analizor static clang , pe care IIRC îl folosește ca LLVM ca backend. Dacă acest lucru este implementat pe platforma dvs., ar putea fi o alegere bună.

Din ceea ce înțeleg, este ceva mai mult decât analiza sintaxei. "Găsirea automată a erorilor", de exemplu.

0
adăugat

Există o opțiune "-Weffc ++" pentru gcc care, conform paginii manuale Mac OS X:

Avertizați despre încălcări ale liniilor directoare de mai jos din cartea Scott Meyers 'Effective C ++:

[croitor]

Știu că ai întrebat despre C, dar acesta este cel mai apropiat pe care îl cunosc.

0
adăugat
Pentru o bază de cod existent, -Weffc ++ are prea multe avertismente "nagioase" pentru a justifica utilizarea în combinație cu -Werror.
adăugat autor Tom

lint is constantly updated... so why would you want a more recent one.

BTW flexelint este scame

0
adăugat
FlexeLint este un produs comercial care nu are istoric de dezvoltare în comun cu Johnson originale Unix Lint, AFAIK. O alternativă necomercială este Splint.
adăugat autor Chris Conway

S-ar putea să găsiți utile instrumentul Uno . Este una dintre puținele opțiuni gratuite de jucării. Diferă de la scame, Flexelint etc., concentrându-se pe un număr mic de erori "semantice" (deref-uri pointer nula, indici de matrice în afara limitelor și utilizarea variabilelor neinitializate). De asemenea, permite verificări definite de utilizator, cum ar fi disciplina de blocare-deblocare.

Lucrez spre o lansare publică a unui instrument de succes, Orion ( CONTENT NU ESTE DISPONIBIL ANYMORE )

0
adăugat

Lentilele, în general, suferă de o problemă de "alarmă falsă": ei raportează mult mai multe probleme decât există. Dacă numărul de avertismente cu adevărat utile este prea mic, utilizatorul învață să ignore instrumentul. Instrumentele mai moderne generează un efort pentru a se concentra asupra avertismentelor cele mai probabile / interesante.

0
adăugat

Am folosit Coverity Prevent pentru a verifica codul sursă C ++.

Nu este un instrument gratuit (deși cred că oferă scanare gratuită pentru proiecte open source), dar este unul dintre cele mai bune instrumente de analiză statică pe care le veți găsi. Am auzit că este chiar mai impresionantă pe C decât pe C ++, dar ne-a ajutat să evităm destul de multe bug-uri până acum.

0
adăugat

Ziua g,

Sunt total de acord cu sugestiile de a citi și de a digera ceea ce vă spune compilatorul după ce ați setat -Wall.

Un bun instrument de analiză statică pentru securitate este FlawFinder scris de David Wheeler. Ea face o treabă bună căutând diverse exploatații de securitate,

Cu toate acestea, nu înlocuiește pe cineva care știe să citească codul. După cum spune David pe pagina sa web, "Un nebun cu un instrument este încă un prost!"

noroc,

jefui

0
adăugat

Recent am compilat o listă cu toate instrumentele de analiză statică pe care le aveam la dispoziție, încă sunt în curs de evaluare a tuturor. Rețineți că acestea sunt în mare parte instrumente de analiză a securității.

0
adăugat
+1 pentru dantură, instrument excelent și gratuit (ca și în vorbirea liberă, nu ca în berea liberă)
adăugat autor bortzmeyer
Este gratuit în ambele sensuri ale termenului.
adăugat autor sebnow

Nu treceți cu vederea compilatorul însuși.

Citiți documentația compilatorului și găsiți toate avertismentele și erorile pe care le poate furniza și apoi activați cât de multe lucruri au sens pentru dvs.

De asemenea, asigurați-vă că spuneți compilatorului dvs. să trateze avertismentele ca erorile, astfel încât să fiți nevoiți să le reparați imediat. ("-Werror" pe gcc)

De asemenea: "-Wall" pe gcc nu permite să permită toate avertismentele, să nu vă păcăliți.

De asemenea, de asemenea: a verifica afară Valgrind - ea „detecta automat [s] multe de gestionare a memoriei și filetare, bug-uri și a profilului [s] programele dvs. în detaliu.“ (Gratuit!)

Valgrind isn't a static checker, but it's a great tool! http://valgrind.org

0
adăugat
De ce este răspunsul acceptat? Ce se întâmplă dacă vreau să verific siguranța resurselor, cum ar fi blocarea / deblocarea? Compilatorul nu poate face nimic. Și valgrind este analiza dinamică a codului ...
adăugat autor UmNyobe

PC-lint/Flexelint are very powerful and useful static analysis tools, and highly configurable, though sadly not free.

Când folosiți mai întâi un astfel de instrument, acestea pot produce un număr mare de avertismente, ceea ce poate face dificilă diferențierea între cele majore și cele minore. Prin urmare, este mai bine să începeți să utilizați instrumentul pe codul dvs. cât mai devreme posibil în proiect și apoi să îl rulați cât mai des pe codul dvs., astfel încât să puteți face noi avertismente pe măsură ce apar.

Cu utilizarea continuă ca aceasta, veți afla în curând cum să vă scrieți codul într-un mod care să confirme regulile aplicate de instrument.

Din acest motiv, prefer instrumente ca Lint care rulează relativ repede și astfel încurajează utilizarea continuă, mai degrabă decât instrumentele mai greoaie pe care le-ați putea folosi mai rar, dacă nu deloc.

0
adăugat

Am descoperit că, în general, este mai bine să folosiți mai multe instrumente de analiză statică pentru a găsi erori. Fiecare instrument este proiectat în mod diferit și poate găsi lucruri foarte diferite unele de altele.

Există câteva discuții bune în unele discuții aici . Este de la o conferință ținută de Departamentul pentru Securitate Internă al Statelor Unite privind analiza statică.

0
adăugat

Sparse is a computer software tool, already available on Linux, designed to find possible coding faults in the Linux kernel.

Există două proiecte active ale Centrul de verificare Linux destinate îmbunătățirii calității modulelor de kernel încărcabile.

  1. Verificarea driverului Linux (LDV) - un set complet de instrumente pentru verificarea codului sursă static al driverelor de dispozitive Linux.
  2. KEDR Framework - un cadru extensibil pentru analiza și verificarea dinamică a modulelor kernel.
  3. Un alt proiect în derulare este Verificarea sistemului de fișiere Linux care vizează dezvoltarea unui set de instrumente dedicat pentru verificarea implementărilor sistemului de fișiere Linux.
0
adăugat

You can use cppcheck. It is an easy to use static code analysis tool.
For example:
cppcheck --enable=all .
will check all C/C++ files under the current folder.

0
adăugat

You can try CppDepend, a pretty complete static analyzer available on windows and linux, throught VS Plugin, IDE or command line, and it's free for open source contributors

0
adăugat