2008-09-27 12 views
61

¿El entorno de desarrollo Xcode de Apple proporciona alguna herramienta para la detección de fugas de memoria?Herramientas de detección de fuga 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.

Respuesta

63

Hay una específica llamada Leaks y al igual que el comentario anterior, dijo, la forma más fácil de ejecutar que es directamente de Xcode:

run -> Comienza con la herramienta de rendimiento -> Fugas

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

+5

Tenga en cuenta que en versiones recientes de OS X, esto es parte de los instrumentos. Esta es una excelente manera de encontrar fugas. –

+1

¿Alguna vez esta herramienta puede estar equivocada? Dice que tengo una fuga, pero no puedo encontrarla en ningún lado. – locoboy

+2

@ cfarm54 - Las probabilidades indican que no es ... – Moshe

4

ObjectAlloc y MallocDebug deberían serle de ayuda. 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 de pérdida de memoria general.

No los he probado con el desarrollo de iPhone todavía, pero tengo que creer que también funcionarían allí.

Asumiendo que se han inscrito para el sitio de desarrolladores iPhone ADC, aquí el enlace a seguir: Instruments User Guide

+0

¿Cómo instalar todo el SDK? –

25

Seleccionar Profile en el menú Product en Xcode 6 para poner en marcha 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. (suspendido por el Grupo Omni)

+2

OmniObjectMeter ahora es de descarga gratuita. – Tony

+2

¿Hay algún tutorial sobre cómo usar los instrumentos de Apple? –

+1

@nute: mira los videos de WWDC en el sitio web de Apple. – titaniumdecoy

6

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

12

El Clang Static Analyser es ideal para encontrar errores en C, C++ y Objective-C Código:

+2

Eso es como decir "gcc es una cobertura de código también" porque incluye gcov. Clang es el nombre del proyecto global de front-end LLVM C. El analizador estático es "el analizador estático Clang"." –

+0

Chris está en lo correcto (por supuesto) pero las cosas han cambiado un poco desde entonces. En Snow Leopard, Xcode 3.2 integrará el analizador estático Clang de una manera hermosa, y de hecho puede ser una forma maravillosa de encontrar fugas. –

+2

xcode4 +, puede usar Producto> Analizar para usar el análisis del código estático de clang. ¡Es muy útil para obtener los principios básicos! – Chris

4

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

+0

Es cierto que el uso de la memoria del tiempo de ejecución es diferente, pero el (los) paradigma (s) para administrar la memoria funcionan para todas las aplicaciones de Objective-C. Una fuga es una fuga, aunque puede manifestarse de diferentes maneras o en momentos raros. –

5

¿Tiene entorno de desarrollo Xcode de Apple proporciona ninguna herramienta para la detección de pérdida 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).

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

3

enter image description here

Paso 1. Levante las asignaciones instrumento

  1. Elija la plantilla de perfiles para las asignaciones:

enter image description here

  1. en la interfaz principal Instrumentos , haga clic en Rastreador de VM, si está presente, y presione la tecla Suprimir ya que no necesitará ese instrumento en particular:

enter image description here

Al hacer clic en el botón más en la parte superior derecha, se puede añadir más instrumentos para diferentes tipos de pruebas, pero no se los cubre en este tutorial.

Paso 2. Configure sus ajustes de Instrumentos

Antes de ejecutar cualquier análisis, hay algunas cosas que hay que 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 escoger su destino, haga clic Mi PC cerca de la cima, se ciernen sobre el dispositivo y, a continuación, elija su aplicación desde el submenú:

enter image description here

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

enter image description here

Paso 3. Pulse registro para ejecutar el instrumento

Una vez que se pulsa el botón de grabación en la parte superior izquierda, su aplicación se pondrá en marcha en el dispositivo, e instrumentos comenzará a trazar tus 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:

enter image description here

Recomiendo ejecutar a través de su aplicación una vez y llegar a un punto estable en la memoria para que tenga una buena base de referencia que hará que cualquier aumento notable. Cuando esté satisfecho de que tiene suficientes datos para probar, presione el botón de detener en la esquina superior izquierda.

Paso 4. Analizar

  1. La primera cosa que hago se establece mi rango de inspección para medir los bytes totales persistentes en mi línea de base. Ese número de bytes persistentes se encuentra justo debajo del resumen de asignación.

enter image description here

para la creación efectiva del rango de inspección, utilice la combinación de teclas Comando < para el rango de inspección izquierda y Comando> para el rango de inspección derecha. En nuestra aplicación, tenemos una referencia de aproximadamente 20 MB.

enter image description here

  1. Entonces, muevo el rango de inspección derecha a un punto en el que había corrido a través de la aplicación de nuevo y volvimos 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.

enter image description here

Hay diferentes maneras de analizar estos datos que no voy a cubrir aquí, pero ser conscientes de que hay todo un menú desplegable con las formas de ver y analizar sus datos.

enter image description here

Paso 5. generaciones Marcado

Si prefiere no hacer frente a la inspección de los rangos tanto, hay una característica llamada Generación Marcos. Hay un botón para ello en el panel derecho de los instrumentos.

enter image description here

Este botón marcar puntos en la línea de tiempo de instrumentos basados ​​en donde la línea de inspección es. 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 las generaciones que está ejecutando el instrumento asignaciones o después de haber dejado la carrera, como en este ejemplo:

enter image description here

Paso 6. Comprobar el seguimiento de la pila

Lo último cubrir es mirar el rastro de la pila.Para esto, desea establecer su rango de inspección para resaltar todas las asignaciones, y luego mirar la vista de estadísticas, asegurándose de que la burbuja Creado & 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.

enter image description here

Profundizando

  1. Mira las mayores asignaciones 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.

enter image description here

  1. Al resaltar diferentes asignaciones después de hacer clic en una flecha, seguir buscando en el detalle ampliado 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.

enter image description here

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

enter image description here

  1. Hay un montón de cosas útiles acerca de este punto de vista, uno de los cuales las etiquetas en su mayoría de color amarillo en la derecha que muestra que sólo la cantidad de memoria cada llamada al método está tomando. 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 utiliza en toda nuestra aplicación y, por lo tanto, es aceptable durante toda la vida de nuestra aplicación.

found here