Domanda

Ho bisogno di uno strumento che analizzi le fonti C ++ e dica quale codice non viene utilizzato. La dimensione delle fonti è ~ 500mb

È stato utile?

Soluzione

PC-Lint è buono. Se deve essere libero / open source, le tue scelte diminuiscono. Cppcheck è gratuito e controlla le funzioni private non utilizzate. Non penso che cerchi cose come classi non integrate come PC-Lint.

Altri suggerimenti

Ancora una volta, inserirò nella discussione AQTime . Ha un'analisi del codice statico per la maggior parte, se non per tutte, le lingue supportate. In realtà non sono entrato in quella parte, ho usato principalmente i profili dinamici (memoria, prestazioni e così via).

Potresti usare uno strumento di copertura del codice (analisi dinamica) per avere un'idea di quale codice non lo sia in fase di esecuzione, quindi analizza a mano per vedere se quel codice è davvero inutile.

Se si desidera un'analisi statica, è necessario uno strumento in grado di leggere l'intero 500 Mb di codice sorgente (circa 20 milioni di righe? Wow!) E calcola a stima conservativa di ciò che viene utilizzato. Ciò richiede fare un punto analisi su tutto il sistema.

Ecco perché: se si esclude qualsiasi modulo Z e decidi che l'UFAM non è in uso, tu potrei scoprire in seguito che Z è stata quella che ha usato l'UFAM, o più sottilmente, Z ha copiato un valore del puntatore che si era verificato & amp; FOO in esso ad un terzo modulo M che a sua volta chiamato "non utilizzato" funzione attraverso il puntatore.

Ciò significa che nessuno strumento di analisi statica legge solo i singoli moduli (unità di compilazione) possono rispondere a questa domanda in modo sicuro. E alla tua scala, non puoi permetterti di fare errori stupidi.

La mia azienda, Semantic Designs, ha effettuato analisi puntuali per 35 milioni di sistemi di linea del codice C utilizzando il nostro DMS Software Reengineering Toolkit. DMS può leggere sistemi molto grandi di codice sorgente. Richiesto uno strumento personalizzato, non tanto perché il codice sorgente era in dispari (archiac) dialetto del C ++ (i sistemi in dialetti estremamente moderni non possono essere così grandi, non abbastanza tempo per codificarli!), ma piuttosto perché in sistemi molto grandi ci sono altri fattori peculiari in gioco. Per il sistema C che abbiamo fatto, esisteva un linker dinamico personalizzato e ciò influiva sull'analisi dei punti, che a sua volta ha dovuto essere personalizzato.

Poiché i sistemi della scala di cui stai discutendo hanno sempre sorprese come questa (BIBSEH: "Perché nei grandi sistemi, tutto accade"), probabilmente è necessario uno strumento personalizzato per rispondere alla domanda. DMS è progettato da personalizzare. Vedi http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html e http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html

Lo strumento di copertura del codice è ciò di cui hai bisogno, ma dovrai eseguire il nostro programma attraverso tutte le funzionalità e vedere ciò che viene reputato inutilizzato. Poiché il codice potrebbe essere funzioni esportate da DLL, dovrai assicurarti che nulla le usi esternamente. Alcuni strumenti di copertura del codice: Purify, CTC ++, Boundschecker potrebbero avere funzionalità di copertura del codice se ricordo bene e un sacco di altri strumenti.

Prestare molta attenzione a rimuovere qualsiasi funzione che potrebbe essere stata esportata senza sapere quale programma esterno potrebbe collegarla / utilizzarla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top