Domanda

Sto lavorando a un progetto in cui sto programmando in C in un ambiente UNIX.Ho utilizzato lo strumento lint per controllare il mio codice sorgente.Lint esiste da molto tempo (dal 1979), qualcuno può suggerire uno strumento di analisi del codice più recente che potrei usare?Preferibilmente uno strumento gratuito.

È stato utile?

Soluzione

Non trascurare il compilatore stesso.

Leggi la documentazione del compilatore e trova tutti gli avvisi e gli errori che può fornire, quindi abilita quelli che hanno senso per te.

Assicurati inoltre di dire al tuo compilatore di trattare gli avvisi come errori in modo da essere costretto a correggerli immediatamente.("-Errore" su gcc)

Anche:"-Wall" su gcc lo fa non abilita tutti gli avvisi, non lasciarti ingannare.

Inoltre anche:dai un'occhiata a valgrind (gratuito!) - "rileva automaticamente molti bug di gestione della memoria e threading e profila i tuoi programmi in dettaglio".

Valgrind non è un controllore statico, ma è un ottimo strumento! http://valgrind.org

Altri suggerimenti

Per il codice C, dovresti assolutamente usare Flexelint.L'ho usato per quasi 15 anni e lo giuro.Una delle caratteristiche davvero eccezionali che ha è che gli avvisi possono essere attivati ​​e disattivati ​​selettivamente tramite i commenti nel codice ("/* lint -e123*/").Questo si è rivelato un potente strumento di documentazione quando volevi qualcosa fuori dall'ordinario."Sto disattivando l'avviso X, quindi c'è qualche buona ragione per cui sto facendo X."

Per chiunque sia interessato a domande interessanti su C/C++, guarda alcuni dei loro esempi sul loro sito e vedi se riesci a capire i bug senza guardare i suggerimenti.

Ne ho sentito parlare bene analizzatore statico clangore, che IIRC utilizza LLVM come backend.Se è implementato sulla tua piattaforma, potrebbe essere una buona scelta.

Da quello che ho capito, fa qualcosa di più della semplice analisi della sintassi."Ricerca automatica dei bug", per esempio.

Stiamo usando Prevenzione della copertura per controllare il codice sorgente C++.

Non è uno strumento gratuito (anche se credo che offra scansione gratuita per progetti open source), ma è uno dei migliori strumenti di analisi statica che troverai.Ho sentito che è ancora più impressionante in C che in C++, ma finora ci ha aiutato a evitare un bel po' di bug.

Recentemente ho compilato un elenco di tutti gli strumenti di analisi statica che avevo a mia disposizione, li sto ancora valutando tutti.Tieni presente che si tratta principalmente di strumenti di analisi della sicurezza.

Puoi usare cppcheck.È uno strumento di analisi del codice statico facile da usare.
Per esempio:
cppcheck --enable=all .
controllerà tutti i file C/C++ nella cartella corrente.

Gli strumenti simili a pelucchi generalmente soffrono di un problema di "falso allarme":segnalano molti più problemi di quanti ne esistano realmente.Se la percentuale di avvisi veramente utili è troppo bassa, l’utente impara a ignorare lo strumento.Gli strumenti più moderni si impegnano a concentrarsi sugli avvisi più probabili/interessanti.

PC-lint/Flexelint sono strumenti di analisi statica molto potenti e utili e altamente configurabili, anche se purtroppo non sono gratuiti.

Quando si utilizza per la prima volta uno strumento come questo, possono produrre un numero enorme di avvisi, il che può rendere difficile la distinzione tra quelli maggiori e quelli minori.Pertanto, è meglio iniziare a utilizzare lo strumento sul codice il più presto possibile nel progetto e quindi eseguirlo sul codice il più spesso possibile, in modo da poter gestire i nuovi avvisi non appena vengono visualizzati.

Con un uso continuo come questo, imparerai presto come scrivere il tuo codice in un modo che confermi le regole applicate dallo strumento.

Per questo motivo preferisco strumenti come Lint che vengono eseguiti in modo relativamente veloce e quindi incoraggiano un uso continuo, piuttosto che strumenti più ingombranti che potresti finire per utilizzare meno spesso, se non del tutto.

Puoi provare CppDepend, un analizzatore statico abbastanza completo disponibile su Windows e Linux, tramite VS Plugin, IDE o riga di comando, ed è gratuito per contributori open source

Potresti trovare il Strumento Uno utile.È una delle poche opzioni gratuite non giocattolo.Si differenzia da lint, Flexelint, ecc.concentrandosi su un piccolo numero di errori "semantici" (deref di puntatori nulli, indici di array fuori limite e uso di variabili non inizializzate).Consente inoltre controlli definiti dall'utente, come la disciplina di blocco-sblocco.

Sto lavorando per il rilascio pubblico di uno strumento successore, Orione (CONTENUTO NON PIÙ DISPONIBILE)

Esiste un'opzione "-Weffc++" per gcc che, secondo la pagina man di Mac OS X:

Avvisa in caso di violazione delle seguenti linee guida di stile contenute nel libro Effective C++ di Scott Meyers:

[tagliare]

So che hai chiesto di C, ma questo è il più vicino che conosco..

lanugine è costantemente aggiornato...quindi perché dovresti volerne uno più recente.

A proposito, flexelint È lanugine

Buongiorno,

Sono totalmente d'accordo con i suggerimenti per leggere e digerire ciò che il compilatore ti dice dopo aver impostato -Wall.

Un buon strumento di analisi statica per la sicurezza è Cerca difetti scritto da David Wheeler.Fa un buon lavoro cercando vari exploit di sicurezza,

Tuttavia, non sostituisce il fatto che qualcuno esperto legga il tuo codice.Come dice David sulla sua pagina web, "Uno sciocco con uno strumento è pur sempre uno sciocco!"

saluti,

rapinare

Ho scoperto che generalmente è meglio utilizzare più strumenti di analisi statica per trovare bug.Ogni strumento è progettato in modo diverso e possono trovare cose molto diverse l'uno dall'altro.

Ci sono alcune belle discussioni in alcuni discorsi Qui.Viene da una conferenza tenuta dal Dipartimento per la Sicurezza Nazionale degli Stati Uniti sull'analisi statica.

Scarso è uno strumento software per computer, già disponibile su Linux, progettato per trovare possibili errori di codifica nel kernel Linux.

Sono due i progetti attivi di Centro di verifica Linux mirava a migliorare la qualità dei moduli del kernel caricabili.

  1. Linux Driver Verification (LDV): un set di strumenti completo per la verifica statica del codice sorgente dei driver dei dispositivi Linux.
  2. KEDR Framework: un framework estensibile per l'analisi dinamica e la verifica dei moduli del kernel.
  3. Un altro progetto in corso è Linux File System Verification che mira a sviluppare un set di strumenti dedicato per la verifica delle implementazioni del file system Linux.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top