iphone cocoa-touch malloc-history

iPhone-errores de depuración "el puntero se liberó no se asignó"



cocoa-touch malloc-history (4)

Generalmente uso NSZombie para tales cosas, mira esto

Al sobre liberar un puntero, es posible que vea un error como

"puntero siendo liberado no fue asignado"

Al depurar con el simulador, agrego un argumento de compilación MallocStackLogging = YES - esto me permite usar malloc_history en el terminal para rastrear donde he liberado un puntero.

Si depuro en el dispositivo con este argumento de compilación, recibo todo tipo de errores de consola "no puedo crear archivos de registro de pila", etc.

Curiosamente, recibo algunos errores de puntero sobre liberados que aparecen en el dispositivo, pero no en el simulador.

¿Alguien ha tenido alguna experiencia rastreando estos usando el dispositivo mismo?

¡Gracias!


Necesita establecer las variables de env MallocStackLogging en el ejecutable de destino ...

Para acceder a estas configuraciones, seleccione su ejecutable desde el panel Grupos y Archivos en XCode, luego Obtenga Información.

Vaya a la pestaña Argumentos y agregue las siguientes entradas en el cuadro "Variables a establecer en el entorno":


Otra forma de hacer esto. Asegúrese de activar NSZombie para que informe la dirección de memoria del objeto que obtiene la versión extra. Luego ejecute con Performance Tool-> Object Allocations. Esto traerá los instrumentos. Mire el registro de la consola como lo proporciona el organizador de Xcode. Una vez que obtenga el crash, busque la dirección de memoria en los instrumentos. Verá el historial completo de Mallocs / Free en ese objeto, así como enlaces directamente a su código.


Pruebe el programa para ver si hay pérdidas de memoria, también revise las autorreleases y si va a soltar objetos correctamente o no. También debemos verificar si un objeto liberado tiene memoria asignada o no. También debe tener cuidado con la liberación automática, ya que accidentalmente podríamos suelta una matriz, una cuerda o cualquier objeto que ya se haya lanzado automáticamente ... ¡espero que ayude y funcione!

Sugerencia: puede probar las fugas analizando su proyecto (haga clic en shift + command + k)