iphone xcode memory-management memory-leaks

iphone - Herramientas de detección de fugas de memoria



xcode memory-management (11)

¿El entorno de desarrollo Xcode de Apple proporciona alguna herramienta para la detección de fugas de memoria?

Estoy especialmente interesado en las herramientas que se aplican al iPhone SDK. Actualmente mi plataforma favorita para proyectos de programación de hobby

Las documentaciones / tutoriales para dichas herramientas serían muy útiles.


¿El entorno de desarrollo Xcode de Apple proporciona alguna herramienta para la detección de fugas de memoria?

Estoy especialmente interesado en las herramientas que se aplican al iPhone SDK.

Sí. Apple los llama "Instrumentos" (hay más que solo herramientas de memoria).

Consulte la Introduction to Instruments User Guide Apple. En particular, consulte Locating Memory Issues in Your App . Proporciona ejemplos de cómo usar las plantillas de seguimiento orientadas a la memoria.



Cuando rustyshelf''s solution asegúrate de probar en el iPhone y no en el simulador. El uso de memoria es dramáticamente diferente.




ObjectAlloc y MallocDebug deberían ser de ayuda para usted. Si instaló el SDK completo, se encontrarán en Developer-> Applications-> Performance Tools.

Sus nombres le dan una buena pista sobre sus funciones, OA, rastrea la creación de objetos y MA es una herramienta general de fuga de memoria.

Todavía no los he probado con el desarrollo de iPhone, pero tengo que creer que también trabajarían allí.

Suponiendo que se haya registrado en el sitio del desarrollador de iPhone de ADC, aquí el enlace a seguir: Instruments User Guide



Puede ejecutar las herramientas dentro de Xcode sobre el menu -> run -> start with performance tool -> ...


Seleccione Profile en el menú Product en Xcode 6 para iniciar la herramienta Instrumentos de Apple. (La aplicación se encuentra dentro del contenido del paquete de la aplicación Xcode: /Applications/Xcode.app/Contents/Applications/ )

Una alternativa comercial es OmniObjectMeter . (Descontinuado por The Omni Group)


Paso 1. Elija el instrumento de Asignaciones

  1. Elija la plantilla de perfil para las asignaciones:

  1. En la interfaz principal de Instruments, haga clic en VM Tracker, si está presente, y presione la tecla Delete ya que no necesitará ese instrumento en particular:

Al hacer clic en el botón más en la parte superior derecha, puede agregar más instrumentos para diferentes tipos de prueba, pero no los cubriré en este tutorial.

Paso 2. Configura tus configuraciones de Instrumentos

Antes de ejecutar cualquier análisis, hay algunas cosas que debe hacer. En primer lugar, debe conectar un dispositivo iOS que tenga su aplicación instalada. Debe ser un dispositivo físico porque el Simulador de iOS sigue siendo un simulador y puede no representar con precisión el uso de memoria en su aplicación o cómo una aplicación puede funcionar bajo la presión de la memoria.

Para elegir su objetivo, haga clic en Mi PC en la parte superior, coloque el cursor sobre su dispositivo y luego seleccione su aplicación del submenú:

A continuación, hay un panel donde puede modificar la configuración de los tipos de asignaciones que verá. Además de asegurarte de que la burbuja Creado y Persistente esté marcada, no hay mucho que tengas que hacer de antemano.

Paso 3. Presione grabar para ejecutar el instrumento

Una vez que presione el botón Grabar en la parte superior izquierda, su aplicación se iniciará en su dispositivo, y los instrumentos comenzarán a trazar sus asignaciones. Todo lo que necesita hacer aquí es ejecutar su aplicación, centrándose en posibles áreas problemáticas para ver si asigna más memoria que desasigna. Esto podría significar hacer muchas tareas repetitivas, pero te agradecerás más tarde.

Debería ver algo como esto:

Recomiendo ejecutar tu aplicación una vez y llegar a un punto estable en la memoria para que tengas una buena línea base que haga que cualquier aumento sea notable. Cuando esté satisfecho de que tiene suficientes datos para probar, presione el botón de detener en la esquina superior izquierda.

Paso 4. Analiza

  1. Lo primero que hago es establecer mi rango de inspección para medir el total de bytes persistentes en mi línea base. Ese número de bytes persistentes se encuentra justo debajo del resumen de asignación.

Para establecer realmente el rango de inspección, use el atajo de teclado Comando < para el rango de inspección izquierdo y Comando> para el rango de inspección correcto. En nuestra aplicación, tenemos una referencia de aproximadamente 20 MB.

  1. Luego, muevo mi rango de inspección derecho a un punto en el que volví a ejecutar la aplicación y volví a nuestra raíz. Aquí, puedes ver que la memoria es más o menos la misma. Por lo tanto, al hacer esto unas cuantas veces más y al ver que su memoria vuelve a nuestra línea de base, puede suponer que no hay problemas importantes de memoria.

Hay diferentes maneras de analizar estos datos que no abordaré aquí, pero tenga en cuenta que hay un menú desplegable completo de formas de ver y analizar sus datos.

Paso 5. Marcando generaciones

Si prefiere no ocuparse tanto de los rangos de inspección, hay una función llamada Mark Generation. Hay un botón para ello en el panel derecho de los instrumentos.

Este botón marcará puntos en la línea de tiempo de los instrumentos en función de dónde se encuentra la línea de inspección. Lo hace con el fin de realizar un seguimiento de todas las asignaciones desde la marca anterior, o desde el principio si no hay otras marcas. Puede marcar generaciones mientras ejecuta el instrumento de asignaciones o después de haber detenido la ejecución, como en este ejemplo:

Paso 6. Mira el rastro de la pila

Lo último que hay que cubrir es mirar el rastro de la pila. Para esto, desea establecer su rango de inspección para resaltar todas las asignaciones y luego ver la vista de estadísticas, asegurándose de que la burbuja Creado y Persistente esté seleccionada en el panel derecho. En la vista de estadísticas, asegúrese de que Bytes persistentes esté ordenado de mayor a menor. Aquí hay muchas asignaciones, y puede ser difícil entender lo que está sucediendo, ya que muchas de ellas son asignaciones del sistema.

Ir a fondo

  1. Mire las asignaciones más grandes y haga clic en la flecha hacia la derecha. Muchas veces habrá asignaciones dentro de las que hizo clic y muchas de ellas no tendrán ningún significado para usted.

  1. Cuando resalte diferentes asignaciones después de hacer clic en una flecha, continúe mirando los detalles extendidos en el panel derecho. Eventualmente, se encontrará con texto en negrita que conduce al código real en su proyecto, diciéndole cuál es el problema.

  1. Si hace doble clic en uno de los elementos en negrita en el seguimiento de la pila, le llevará al código real (suponiendo que ejecutó asignaciones en una aplicación que posee).

  1. Hay muchas cosas útiles sobre esta vista, una de las cuales es la mayoría de las etiquetas amarillas a la derecha que le muestran cuánta memoria ocupa cada llamada de método. Cada aplicación es diferente, por lo que usted, el desarrollador, debe decidir si el método resaltado es un problema, algo que puede optimizar o solo una parte inevitable de su aplicación.

  2. En mi caso, esa variable UIColor es algo que es persistente y se usa en toda nuestra aplicación y, por lo tanto, es aceptable durante toda la vida de nuestra aplicación.

encontrado aquí


Hay uno específicamente llamado Leaks y, como decía un cartel anterior, la forma más fácil de ejecutarlo es directamente desde Xcode:

ejecutar -> Comenzar con la herramienta de rendimiento -> Fugas

Parece muy bueno para detectar fugas de memoria, y fue fácil para una cabeza no C como yo descubrirlo.