Sé que las funciones se pueden llamar dinámicamente, pero ¿hay alguna manera de determinar estáticamente qué funciones (y métodos de objetos ObjC) no se están llamando?¿Hay alguna manera de determinar las funciones no utilizadas en Xcode4?
Respuesta
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.
objc_cover lo ayudará a detectar métodos Objective-C potencialmente no utilizados.
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.
- 1. ¿Hay alguna manera de obtener una advertencia sobre las funciones no utilizadas?
- 2. Buscar Funciones públicas no utilizadas
- 3. ¿Hay alguna manera de identificar las supresiones de mensajes FxCop no utilizadas o obsoletas?
- 4. Suprimir las advertencias de "funciones no utilizadas" de Erlang
- 5. ¿Hay alguna manera de manejar las funciones no definidas que se invocan en JavaScript?
- 6. Buscar funciones de Javascript no utilizadas?
- 7. Funciones de presentación utilizadas en las propiedades QuickCheck
- 8. ¿Hay alguna manera de determinar el tamaño físico del monitor?
- 9. ¿Hay alguna manera de entrar en las funciones decoradas, omitiendo el código de decorador
- 10. ¿Hay una manera simple de eliminar las dependencias no utilizadas de un maven pom.xml?
- 11. ¿Hay alguna aplicación que elimine las clases no utilizadas de los marcos?
- 12. ¿Hay alguna desventaja en el uso de las funciones -Bsymbolic-?
- 13. ¿Hay alguna manera de recorrer y ejecutar todas las funciones en una clase de Python?
- 14. ¿Hay alguna manera de determinar automáticamente las dependencias al configurar un archivo de control dpkg?
- 15. ¿Hay alguna manera de determinar si un PID de Linux está en pausa o no?
- 16. Resharper- Encuentra todas las clases no utilizadas
- 17. ¿Hay alguna manera de obtener todas las variables en Ruby?
- 18. ¿Hay alguna manera de limitar las longitudes vline en ggplot2?
- 19. ¿Alguna manera de verificar funciones anónimas?
- 20. ¿Hay alguna diferencia entre las funciones R ajustadas() y predecir()?
- 21. ¿Hay alguna manera de desactivar las advertencias xml?
- 22. ¿Hay alguna manera de determinar si un paquete tiene estado en Oracle?
- 23. ¿Hay alguna manera de acelerar las compilaciones de WiX?
- 24. Buscar todas las variables no utilizadas
- 25. En ColdFusion, ¿hay alguna manera de determinar en qué servidor se está ejecutando el código?
- 26. ¿Hay alguna manera de enumerar todas las asociaciones belongs_to?
- 27. ¿Hay alguna manera de determinar la cantidad de RAM de video gratuita en Linux?
- 28. C#: ¿Hay alguna manera de clasificar las enumeraciones?
- 29. ¿Hay alguna manera en Eclipse para determinar qué está consumiendo tiempo de CPU?
- 30. ¿Hay alguna manera de ver la lista de funciones en un módulo, en GHCI?
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
@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
@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