342 votos

Symbolicating Aplicación para el iPhone de Informes de accidentes

Estoy buscando probar y symbolicate mi iPhone de la aplicación de informes de accidentes.

He recuperado los informes de errores de iTunes Connect. He binario de la aplicación que he presentado a la App Store y tengo la dSYM archivo que se generó como parte de la construcción.

Yo tengo todos estos archivos dentro de un directorio único que está indexado por el centro de atención.

¿Y ahora qué?

He intentado invocar:

symbolicatecrash crashreport.crash myApp.app.dSYM

y sólo salidas del mismo texto que se encuentra en el informe del accidente para empezar, no symbolicated.

Estoy haciendo algo mal?

Cualquier ayuda sería muy apreciada, gracias.

629voto

Naveen Shan Puntos 6641

Pasos para analizar el informe de accidente de apple:

  1. Copia el lanzamiento de archivo .app que fue empujado a la appstore, la .dSYM archivo que se creó en el momento de la liberación y el informe de accidente de recepción de APPLE en una CARPETA.

  2. ABRIR la aplicación terminal y vamos a la carpeta creada anteriormente (utilizando cd de comandos)

  3. Ejecutar atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. El lugar de la memoria debe ser aquel en el que la aplicación se estrelló según el informe.

Ex: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

Esto demostraría que la línea exacta, el nombre del método que resultó en el accidente.

Ex: [classname functionName:]; -510

Symbolicating IPA

si hacemos uso de IPA para symbolicating - sólo cambiar el nombre de la extensión .ipa con .zip , descomprímelo, entonces podemos obtener una capacidad de Carga de la Carpeta que contiene la aplicación. En este caso no necesitamos .dSYM archivo.

Nota

Esto sólo puede funcionar si la aplicación binario no tiene símbolos despojado. De manera predeterminada las versiones de lanzamiento despojado de los símbolos. Podemos cambiarlo en la configuración de generación de proyecto "Tira de los Símbolos de Depuración Durante la Copia" a NO.

Más detalles ver este post

112voto

Andreas Klöber Puntos 2082

Después de leer todas estas respuestas aquí con el fin de symbolicate un registro de error (y, finalmente, tener éxito) creo que hay algunos puntos que faltan aquí que son realmente importantes en orden a determinar la razón por la invocación de symbolicatecrash no produce un symbolicated de salida.

Hay 3 bienes que han de encajar cuando symbolicating un registro de error:

  1. El registro de bloqueos de archivo (es decir. example.crash), ya sea exportado desde XCode del organizador o recibido de iTunes Connect.
  2. La .app paquete (es decir. example.app) que en sí mismo contiene el binario de la aplicación que pertenece al registro de error. I usted tiene un .ipa paquete (es decir. example.ipa), a continuación, usted puede extraer el .app paquete de descomprimir el .ipa paquete (es decir. unzip example.ipa). Después, el .app paquete reside en la extraídos Payload/ carpeta.
  3. La .dSYM paquete contiene los símbolos de depuración (es decir. example.app.dSYM)

Antes de comenzar symbolication usted debe comprobar si todos los artefactos partido, lo que significa que el registro de bloqueo pertenece a la binario que tienen y que los símbolos de depuración son los que se producen durante la construcción de ese binario.

Cada binario es referido por un UUID que se puede ver en el accidente del archivo de registro:

...
Binary Images:
   0xe1000 -   0x1f0fff +example armv7  <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff  dyld armv7s  <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...

En este extracto en el registro de bloqueo pertenece a una aplicación binaria imagen con el nombre example.app/ejemplo con UUID aa5e633efda8346cab92b01320043dc3.

Usted puede comprobar el UUID del paquete binario que tiene con dwarfdump:

dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example

Después se debe comprobar si los símbolos de depuración tiene también pertenecen a binario:

dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example

En este ejemplo, todos los activos y usted debería ser capaz de symbolicate su stacktrace.

Procedimiento para la symbolicatecrash secuencia de comandos:

En la última versión de XCode usted debe ser capaz de invocar la secuencia de comandos a través de

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

Si es que no se puede ejecutar un find . -name symbolicatecrash en su XCode.app directorio para encontrar.

Como usted puede ver no hay más parámetros dados. Así que el guión tiene que encontrar su aplicación binario y los símbolos de depuración mediante la ejecución de una búsqueda de spotlight. Busca los símbolos de depuración con un índice específico llamado com_apple_xcode_dsym_uuids. Usted puede hacer esta búsqueda de sí mismo:

mdfind 'com_apple_xcode_dsym_uuids = *'

resp.

mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"

El primer foco de invocación, da todos los indexados dSYM paquetes y el segundo le da la .dSYM paquetes con un UUID específico. Si el foco no encuentra su .dSYM paquete, a continuación, symbolicatecrash no. Si usted hace todas estas cosas por ejemplo. en una subcarpeta de su ~/Desktop foco debería ser capaz de encontrar todo.

Si symbolicatecrash considera que su .dSYM paquete debe haber una línea como la siguiente en symbolicate.log:

@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )

Para encontrar su .app paquete de búsqueda de spotlight como la siguiente se invoca symbolicatecrash:

mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"

Si symbolicatecrash considera que su .app del paquete debe ser el siguiente extracto en symbolicate.log:

Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH

Si todos los recursos se encuentran por symbolicatecrash se debe imprimir el symbolicated versión de su registro de error.

107voto

Alan Rogers Puntos 8400

Con la última versión de Xcode (3.2.2), se puede arrastrar y soltar cualquier informes de bloqueo en el Dispositivo de los Registros de la sección de la Xcode Organizador y serán automáticamente por symbolicated para usted. Creo que esto funciona mejor si usted se la construyó de esa versión de la Aplicación usando la versión de Archivo Y (también parte de Xcode 3.2.2)

27voto

También me puso dsym, aplicación de paquete, y el registro de bloqueo juntos en el mismo directorio antes de ejecutar symbolicate accidente

Entonces puedo utilizar esta función, definida en mi .profile para simplificar la ejecución de symbolicatecrash:

function desym
{
    /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}

Los argumentos que se han añadido allí te pueden ayudar.

Usted puede comprobar para asegurarse de spotlight "ve" su dysm archivos ejecutando el comando:

mdfind 'com_apple_xcode_dsym_uuids = *'

Busque el dsym que tiene en su directorio.

NOTA: a partir de la última versión de Xcode, ya no hay un Desarrollador directorio. Usted puede encontrar esta utilidad aquí: /Aplicaciones/Xcode.app/Contenidos/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/a/Resources/symbolicatecrash

27voto

averydev Puntos 2931

Yo uso el freno de aire en mis aplicaciones, que hace un trabajo bastante bueno de la distancia de registro de errores.

He aquí cómo me symbolicate con atos si la traza de las necesidades:

  1. En Xcode (4.2) ir a el organizador, haga clic en el archivo de que el .ipa de archivo fue generado.

  2. En la Terminal, cd en el xcarchive por ejemplo, MyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Escriba el siguiente atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (no te olvides de las comillas simples)

  4. No he incluido en mi símbolo en esa llamada. Lo que obtienes es un cursor de bloque en una línea vacía.

  5. Entonces puedo copiar/pegar mi símbolo de código en el que el bloque de cursor y presione entrar. Verás algo como:

    -[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)

  6. Estás de vuelta a un bloque de cursor y puedes pegar en otros símbolos.

Ser capaz de ir a través de su traza de un elemento sin volver a entrar en el primer bit es un buen ahorro de tiempo.

¡A disfrutar!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X