2011-08-19 12 views

risposta

2

Non sono sicuro che questa sia una cosa sensata per qualcuno che abbia tentato di creare un tale strumento di analisi statico: sarebbe molto complicato e probabilmente si scoprirà che troverà solo esempi di funzioni che potrebbero essere non essere chiamato - es funzioni che hai creato nelle tue classi e non hai chiamate per loro. Tutte le cose che interagiscono con Cocoa ... beh, il problema è che potrebbero "chiamarsi" in circostanze diverse.

In ogni caso, ciò che dovrebbe essere veramente interessato è la copertura del codice di runtime - in quanto ciò mostrerebbe (con una discreta serie di test) quale codice viene effettivamente utilizzato, che sarebbe un sottoinsieme più piccolo.

+0

concordato. Questo è un problema difficile, soprattutto quando si inizia a introdurre i puntatori di funzione, i callback e il codice condizionale pesante. Sembra il problema dell'arresto. – Luke

+0

@Luke - d'accordo, la domanda è interessante - pensarci mi ha fatto capire quanto sarebbe stato difficile. Con l'uso di selettori e inoltro di messaggi anche. Codice di strumenti per copertura dinamica - non banale, ma molto più facile da vedere come è possibile farlo. – iandotkelly

+0

@iandotkelly: idea interessante, facendolo dinamicamente. piccolo trucco che viene in mente: lancia il tuo codice attraverso un profiler per un po ', estrai tutti i nomi di funzioni e confronta con un database TAGS. Questo dovrebbe darti un'idea, quali funzioni sono chiamate raramente o mai del tutto. Ciò è ovviamente stocastico e non preciso al 100%, ma elimina il controllo di molte funzioni effettivamente chiamate. – Arne

2

objc_cover ti aiuterà a individuare metodi Objective-C potenzialmente inutilizzati.

+0

Sembra coprire solo un singolo file. Ce n'è uno che copre un elenco di file? – David

+0

Non gli dai un file sorgente, gli dai un file binario compilato e restituisce un elenco di selettori * potenzialmente * inutilizzati. – 0xced

0

aggiungi -Wunused-function al tuo elenco di WARNING_CFLAGS.

considera anche le funzioni prese dall'indirizzo come riferimento (ideale per l'utilizzo normale). quindi compilare il programma con gcc e clang per una copertura ottimale.

nota che questo flag non copre tutti i casi (ad esempio le funzioni esportate) e si concentra principalmente sulle funzioni che hanno un collegamento interno. diffating utilizzando strip e nm può aiutare a isolare i simboli esterni - non conosco un buon strumento per questo processo esatto.

se si desidera individuare metodi objc non utilizzati, è necessario riformulare la domanda.

Problemi correlati