restricciones porque olvide iphones enlazar encuentra eliminar dispositivos como codigo archivos app iphone xcode debugging malloc-history

iphone - porque - ¿Cómo usar MallocStackLogging en el dispositivo?



me olvide el codigo de restricciones del iphone (3)

Así es como depuro APP con malloc stack history en idevice, es realmente complicado, pero no tengo otra manera de lidiar con un problema de memoria del grupo de versiones automáticas.

  1. Necesita un ideario jailbreak con herramientas de desarrollador instaladas, luego tiene gdb.

  2. Para habilitar el registro de la pila malloc, necesita establecer las variables de entorno MallocStackLoggingNoCompact y MallocStackLogging, necesitamos algún truco para hacerlo.

Primero, necesitamos otorgarle privilegios de root a su aplicación.

mv -f /User/Application/xxxxxxxxxxxxx/YOUR_APP.app /Application/YOUR_APP.app cd /Application chown -R root:wheel YOUR_APP.app chmod 4755 YOUR_APP.app/YOUR_APP

Cambia el nombre de tu programa

mv YOUR_APP.app/YOUR_APP YOUR_APP.app/BACK_UP_NAME

Use un scrip de shell corto para iniciar su programa, para que podamos mantener el env. Guárdalo en YOUR_APP.app/YOUR_APP

#!/bin/bash export MallocStackLogging=1 export MallocStackLoggingNoCompact=1 exec /Applications/YOUR_APP.app/BACK_UP_NAME

Hecho.

Simplemente inicie su aplicación, toque el ícono o use el comando abrir, verá un archivo de registro de pila en el directorio / tmp.

Use ps aux | grep YOUR_APP ps aux | grep YOUR_APP find id de proceso, gdb -p PROCESS_ID adjunta al progreso, gdb -p PROCESS_ID un punto de interrupción, prueba info malloc ADDRESS , se mostrará el historial de malloc.

Tengo un problema de memoria en una aplicación de iPhone que me gustaría depurar con MallocStackLogging . El error involucra el giroscopio, así que tengo que depurar en el dispositivo, no en el simulador.

Establecí la variable de entorno MallocStackLogging y el iPhone registra correctamente los registros de la pila mallock:

MyApp(1856) malloc: recording malloc stacks to disk using standard recorder MyApp(1856) malloc: stack logs being written into /private/var/mobile/Applications/1FD1F8D2-5D30-4AA7-B426-C52FE20266DE/tmp/stack-logs.1856.MyApp.index MyApp(1856) malloc: Please issue: cp /private/var/mobile/Applications/1FD1F8D2-5D30-4AA7- B426-C52FE20266DE/tmp/stack-logs.1856.MyApp.e8z3IL.link /tmp/

¿Ahora cómo puedo trabajar con ellos?

Puedo transferirlos a Mac usando el Xcode Organizer. Pero, ¿qué debería hacer con estos dos archivos?

  • stack-logs.1856.MyApp.index
  • stack-logs.1856.MyApp.e8z3IL.link

Intenté mover los archivos en / tmp en la Mac y llamé:

$ malloc_history 1856 -all_events malloc_history cannot examine process 1856 because the process does not exist.

Claramente, el comando malloc_history busca procesos en ejecución en la máquina local. Me falta una opción para especificar el archivo de registro manualmente.

¿Hay alguna manera de hacer que esto funcione ya sea directamente trabajando con Xcode en el dispositivo (sin jailbreak) o después de transferir los registros a la Mac?


En la aplicación Instruments, que puede diagnosticar una aplicación que se ejecuta en el simulador o en un dispositivo, el instrumento Allocations registra las direcciones de memoria y los historiales de asignación. Puede navegar por tipo de objeto / asignación o dirección de memoria específica. Esta es probablemente la forma más directa de lograr lo que desea.

Ejecutar malloc_history en el dispositivo requeriría jailbreak para habilitar una conexión ssh al dispositivo o ejecutar malloc_history desde su código. Pero no estoy seguro de si malloc_history existe en un dispositivo iOS. Y el texto de ayuda de malloc_history no menciona una opción para operar en archivos de registro en lugar de un proceso existente, que probablemente ya conozca.


No pretendo sonar impertinente, pero ¿ha intentado enchufar el dispositivo y ejecutarlo bajo el depurador mientras estaba conectado?

Hago una depuración extensiva mientras ejecuté la aplicación en el dispositivo. Necesita iniciar la aplicación bajo el depurador.