2010-11-16 2 views
9

Ciao ragazzi, stavo cercando un modo per trovare funzioni staticamente irraggiungibili in un (molto) grande progetto C++. Avevo provato a usare doxygen e altri strumenti di analisi statici suggeriti qui, ma sembrava che il progetto fosse troppo complicato per loro da gestire. Alla fine ho deciso che usare gli strumenti GCC (g ++, gprof, gcov, ecc.) È l'opzione più sicura, anche se non sono riuscito a capire come farlo. Penso che le ottimizzazioni g ++ eliminino le funzioni staticamente irraggiungibili, ma non sono sicuro di come ottenere i nomi delle funzioni che elimina.Utilizzo di GCC per trovare le funzioni non raggiungibili ("codice guasto")

Avete qualche suggerimento?

Grazie!

+1

http://stackoverflow.com/questions/229069/dead-code-detection-in-legacy-cc-project – Veger

risposta

7

L'ottimizzazione del codice guasto viene in genere eseguita dal linker - il compilatore non ha la panoramica. Tuttavia, il compilatore potrebbe aver eliminato le funzioni non utilizzate static (poiché hanno un collegamento interno).

Pertanto, non si dovrebbero considerare le opzioni GCC, ma le opzioni ld. Sembra che tu voglia --print-gc-sections. Tuttavia, si noti che probabilmente si desidera che GCC inserisca ciascuna funzione nella propria sezione, -ffunction-sections. Di default GCC mette tutte le funzioni nella stessa sezione, e ld non è abbastanza intelligente da eliminare le funzioni inutilizzate - può solo eliminare sezioni inutilizzate.

-1

gcov è quello che stai cercando. Hai elencato nella domanda, non l'hai guardato?

+5

In realtà, "gcov crea un file di registro chiamato sourcefile.gcov che indica quante volte ogni riga di un il file sorgente sourcefile.c è stato eseguito. " Questa è un'analisi dinamica non statica. – stnr