Come individuare le funzioni non richiamate? [chiuso]

8

Sto guardando un codice C / C ++ che sembra avere funzioni definite, ma mai utilizzate. Questo è un processo piuttosto noioso per tracciare il codice e verificare. Ho fatto alcuni sondaggi e ci sono un certo numero di strumenti che possono fare questo tipo di analisi.

Qualcuno può condividere esperienze o suggerimenti su quali strumenti e tecniche sono i migliori o metodi alternativi di verifica di questo codice non sono infatti usati?

    
posta user59871 22.07.2012 - 18:28
fonte

7 risposte

10

Ci sono alcuni strumenti là fuori che possono trovare "codice morto" nei tuoi programmi. puoi leggere informazioni su questi thread su Overflow dello stack qui e qui . un piccolo riassunto:

usa i flag del compilatore gcc -Wunused e -Wunreachable-code, e poi usa uno strumento come lcov per trovare i metodi non utilizzati.

    
risposta data 22.07.2012 - 18:36
fonte
5

Trace? Perché? Basta commentarli ed eseguire il compilatore. Ti dirà velocemente se hai commentato qualche funzione a cui è stato fatto riferimento altrove.

    
risposta data 22.07.2012 - 21:14
fonte
2

Se stai attivamente cercando codice inutilizzato, usa qualcosa suggerito da Jake223 .

Ma, se ti capita di imbatterti in un codice che sembra non essere utilizzato, puoi semplicemente cercare il nome del metodo nella tua base di codice. Se si tratta di un metodo privato, il tuo lavoro è facile, cerca solo la classe corrente. Se si tratta di un metodo pubblico, cerca tutto. Se è un'intera classe, cerca il suo nome in tutto il tuo codice.

Nessun successo? Perfezionare. Elimina il codice e esegui test . Hai dei test, vero? Non impegnare le tue modifiche al tuo sistema di versione del documento . Ne usi uno, vero? In questo modo, se scopri di averne sempre bisogno, ripristini una modifica.

Eliminare il codice dovrebbe essere qualcosa che fai ogni giorno. Forse tu rifatti il codice e cancelli quello vecchio. Oppure trova il vecchio codice non utilizzato ed eliminalo. E anche se non si dispone di backup, quanto è difficile riscrivere una funzione o due? E la seconda volta scriverò sicuramente meglio di prima.

    
risposta data 22.07.2012 - 22:59
fonte
0

A meno che tu non stia cercando problemi (ad esempio, sai che dovrebbero essere chiamati) perché preoccuparsi. Se sono sinceramente non richiamati, saranno probabilmente rimossi dal linker, e in ogni caso lo spazio sprecato non è significativo. D'altra parte, se li rimuovi e più tardi trovi che erano necessari (forse in alcune configurazioni del compilatore di cui non eri a conoscenza) avrai più lavoro da fare per recuperarli. Questo è particolarmente difficile se la rimozione e la riscoperta sono separate da un sacco di tempo.

    
risposta data 22.07.2012 - 22:30
fonte
0

Il mio IDE di scelta è Eclipse, e anche se è un po 'complicato da impostare all'inizio, vale la pena considerare tutti gli strumenti che ottengo. Uno di questi strumenti (e non ho idea di quale sia il suo nome ufficiale) ti informa del codice inutilizzato, come classi, funzioni, variabili, ecc. L'IDE mostra semplicemente una linea gialla sotto la dichiarazione. Non sono sicuro al 100% se questo funziona con progetti multi-file, ma puoi sempre dargli una possibilità!

    
risposta data 23.07.2012 - 00:57
fonte
0

Gli IDE di solito hanno questa funzionalità ben implementata e funziona di default (di solito può essere disabilitato).

Qualunque sia il metodo scelto tra le altre risposte per trovare il codice morto, sii sempre consapevole dei problemi di riflessione. Alcuni metodi / campi possono essere accessibili tramite la sola riflessione. La rimozione di questi metodi non attiverà alcun allarme, ad eccezione del runtime.

Se hai (buono) prove scritte per i tuoi progetti, saranno di grande valore in questa situazione.

    
risposta data 23.07.2012 - 21:10
fonte
0

Puoi utilizzare Cppcheck per questo scopo:

$ cppcheck --enable=unusedFunction .
Checking foo.c...
1/2 files checked 0% done
Checking main.c...
2/2 files checked 0% done
[foo.c:1]: (style) The function 'foo' is never used.
    
risposta data 02.07.2016 - 18:11
fonte

Leggi altre domande sui tag