2011-08-19 6 views

Respuesta

2

No estoy seguro de que esto sea algo sensato para alguien que haya intentado hacer una herramienta de análisis estático. Sería muy complicado, y probablemente encontraría que solo encontraría ejemplos triviales de funciones que no ser llamado, por ejemplo funciones que ha creado en sus clases, y no tiene llamadas a ellas. Todo lo que interactúa con Cocoa ... bueno, el problema es que 'podrían' ser llamados en diferentes circunstancias.

En cualquier caso, lo que realmente debería interesarle es la cobertura del código de tiempo de ejecución, ya que esto le mostraría (con un conjunto de pruebas decente) qué código se está utilizando realmente, que sería un subconjunto más pequeño.

+0

De acuerdo. Este es un problema difícil, especialmente cuando comienzas a introducir punteros de función, devoluciones de llamada y código condicional pesado. Suena como el problema para detenerse. – Luke

+0

@Luke: estuvo de acuerdo, la pregunta es interesante, pensar en ello me hizo darme cuenta de lo difícil que sería. Con el uso de selectores y reenvío de mensajes también. Instrumentando el código para la cobertura dinámica, no es trivial, pero es mucho más fácil ver cómo se puede hacer eso. – iandotkelly

+0

@iandotkelly: idea interesante, haciéndolo dinámicamente. pequeño truco que viene a la mente: ejecuta tu código a través de un generador de perfiles por un tiempo, extrae todos los nombres de las funciones y compáralo con una base de datos TAGS. Eso debería darte una idea, qué funciones se llaman rara vez o nunca. Esto es, por supuesto, estocástico y de ninguna manera 100% preciso, pero elimina la comprobación de muchas funciones que realmente se llaman. – Arne

2

objc_cover lo ayudará a detectar métodos Objective-C potencialmente no utilizados.

+0

Parece que solo cubre un solo archivo. ¿Hay alguno que cubra una lista de archivos? – David

+0

No le da un archivo fuente, le da un binario compilado y devuelve una lista de selectores * potencialmente * no utilizados. – 0xced

0

agrega -Wunused-function a tu lista de WARNING_CFLAGS.

esto también considera funciones tomadas por dirección como se hace referencia (ideal para uso normal). luego compila tu programa con gcc y clang para una cobertura óptima.

tenga en cuenta que este indicador no cubre todos los casos (por ejemplo, funciones exportadas), y se centra principalmente en las funciones que tienen un enlace interno. diferir usando strip y nm puede ayudar a aislar símbolos externos; no conozco una buena herramienta para este proceso exacto.

si desea ubicar los métodos objc no utilizados, debe volver a formular su pregunta.

Cuestiones relacionadas