2009-09-16 7 views
18

Mi è stato chiesto di recente delle alternative a Coverity Prevent per un codice base che include sia C/C++ sia Java. Ovviamente, sul lato Java, gli strumenti gratuiti disponibili includono Findbugs (analisi del codice compilato) e PMD (analisi del codice statico). Sono molto potenti, soprattutto quando si inizia a studiare l'integrazione con gli IDE (che, di nuovo, sono gratuiti).Esiste un Findbug e/o un equivalente PMD per C/C++?

Tuttavia, le cose sono rischiosa quando si inizia a muoversi in C/C++ regno con i vari compilatori, architetture, ecc

ho proposto una varietà di strumenti per il lato Java, inclusi sia Findbugs e PMD. Quello che sto cercando è la migliore opzione per il lato C/C++ se considerato utilizzando i seguenti parametri:

  1. Prezzo: libero è meglio, ma può essere battuto dal valore migliore. Tuttavia, i modelli di tariffazione che fanno pagare per riga di codice sono orribili.
  2. Set di funzioni: in che modo questo strumento migliora la mia vita? In che modo rileva i miei errori prima di verificarli, prima di spedire il codice, ecc.?
  3. Usabilità: posso usare lo strumento alla mia scrivania? Posso condividere i rapporti e/oi risultati? Posso integrare lo strumento con Fogbugz (che usiamo nel mio gruppo)? Posso integrare lo strumento in CruiseControl (o nell'equivalente)?

Lo strumento finale sarebbe qualcosa di utile e utilizzabile come una combinazione di Findbug e PMD con set di funzionalità identiche, il tutto a zero dollari per posto.

risposta

3

I due che vengono in mente sono Splint per C e Cppcheck per C++.

Se si desidera cercare più opzioni, questa funzione di questi strumenti è "analisi del codice statico". Questo potrebbe aiutarti a trovare più strumenti per C e/o C++. Potresti anche essere interessato alla risposta alla domanda "What open source C++ static analysis tools are available?"

+0

Grazie per il collegamento al wiki. In questo caso, sto provando a produrre un set di funzionalità specifico anziché un elenco di tutti gli strumenti disponibili. Questa domanda sta specificatamente cercando di affrontare la risposta riflessiva che ricevo quando parlo di Findbugs e PMD: "Oh, niente di simile esiste per C++". –

+1

Gli strumenti a cui sono collegato sono, dalla mia limitata esperienza C/C++, i principali strumenti non commerciali per l'analisi del codice statico per quelle lingue. Potrebbero essercene altri là fuori, ma se avessi bisogno di eseguire analisi statiche di qualcosa in una di quelle lingue, questi sono gli strumenti che vorrei prendere. –

+0

@Thomas Owens, abbastanza onesto - grazie per le raccomandazioni. –

3

C++ è un linguaggio abbastanza complicato che gli strumenti per esso (come il refactoring o gli strumenti di analisi statica) non sono buoni come Java o C#.

Gimpel Software PC-lint è la cosa più vicina a uno strumento di controllo dei bug standard per C++ che io conosca. È commerciale con un modello di prezzi ragionevole. Non so quanto bene si integri con altri strumenti.

Il progetto Clang open source alla fine dovrebbe essere in grado di fare molto di ciò che si vuole (e sembra davvero cool), ma è ancora in fase di sviluppo.

+0

PC-Lint è abbastanza facile da integrare almeno dal punto di vista della segnalazione degli errori poiché è possibile configurare il formato del messaggio di errore come richiesto dal proprio IDE per trovare gli errori in modo automatico. –

+0

Devo non essere d'accordo sul commento sulla complessità. Sono d'accordo che è molto più * conveniente * analizzare il codice byte Java o l'origine Java standard. –

+0

Macro, un linguaggio di compilazione completo in Turing, abbastanza complessità e casi particolari che la maggior parte dei compilatori (tutti?) Ottengono alcuni aspetti dello standard errati, con il risultato che Boost deve sviluppare una vasta lista di soluzioni alternative del compilatore ... Mi piace C++, ma non è un linguaggio semplice, e questo rende gli strumenti più difficili. –

3

PC-Lint è la strada da percorrere. A differenza della maggior parte degli altri strumenti, ha un completo monitoraggio inter-funzione e inter-modulo e supporta tutti i bordi pelosi della compilazione/analisi del template. Ho comprato una copia personale per me stesso circa 9 anni fa, solo perché è così economico. Ho finito per usarlo molto nei progetti open source. PC-Lint non esegue la licenza in base a LOC, non telefona a casa e non c'è un server di licenza. È molto sul sistema d'onore e molto senza senso. Nel corso dei 9 anni, ho riscontrato alcuni problemi (e quelli sono stati pochi e distanti tra loro), ma sono stati quasi sempre risolti in poche settimane.

Sorgente open-source, c'è SMatch, basato sulle tecniche di analisi di meta-compilazione di Coverity, che il progetto vinicolo utilizza in modo piuttosto pesante con grande effetto. Il sub-tool cpd (copy paste detector) di PMD funziona su C++ ed è molto veloce. Per la complessità ciclomatica, c'è pmccabe che è facilmente installabile tramite apt-get (su Linux, su Windows, compilo il sorgente sotto cygwin).

PC-Lint richiede alcune configurazioni per farlo funzionare correttamente, al massimo un giorno o due. Gli altri strumenti non funzionano in modo così profondo, quindi puoi semplicemente toccare terra con un comando come "find. -name .c | xargs pmccabe | sort -n | tail -n 20"

0

Io uso flawfinder.py che esegue la scansione di 160 funzioni pericolose in C/C++. http://www.dwheeler.com/flawfinder/

Se si desidera una porta rubino basata su rilevatore di luminosità, è possibile utilizzare vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Entrambi questi strumenti analizza i file C/C++ di codice sorgente per le vulnerabilità note, tra cui buffer overflow, condizioni di gara, crypto deboli, configurazioni chroot jail ... & più).

Rick

Problemi correlati