Estoy tratando de simbolizar los informes de fallas de mi aplicación para iPhone.
Recuperé los informes de fallos de iTunes Connect. Tengo el archivo binario de la aplicación que envié a la App Store y tengo el archivo dSYM que se generó como parte de la compilación.
Tengo todos estos archivos juntos dentro de un único directorio que está indexado por Spotlight.
¿Ahora que?
He intentado invocar:
symbolicatecrash crashreport.crash myApp.app.dSYM
y solo muestra el mismo texto que está en el informe de bloqueo para comenzar, no simbolizado.
¿Estoy haciendo algo mal?
ios
crash-reports
symbolicate
Jasarien
fuente
fuente
symbolicatecrash
Enumero dónde encontrar el comando, cómo usarlo y cómo encontrar el archivo dSYM necesario para hacer la simbolización.Respuestas:
Pasos para analizar el informe de bloqueo de apple:
Copie el archivo .app de lanzamiento que se envió a la tienda de aplicaciones, el archivo .dSYM que se creó en el momento del lanzamiento y el informe de bloqueo recibido de APPLE en una CARPETA .
ABRA la aplicación de terminal y vaya a la carpeta creada anteriormente (usando el
cd
comando)Ejecutar
atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
. La ubicación de la memoria debe ser aquella en la que la aplicación se bloqueó según el informe.Ex:
atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
Esto le mostrará la línea exacta, el nombre del método que resultó en un bloqueo.
Ex:
[classname functionName:]; -510
Simbolizando IPA
si usamos IPA para simbolizar, simplemente cambie el nombre de la extensión .ipa con .zip, extráigala y luego podemos obtener una Carpeta de carga útil que contiene la aplicación. En este caso no necesitamos el archivo .dSYM.
Nota
Esto solo puede funcionar si el binario de la aplicación no tiene símbolos despojados. Por defecto, las versiones de lanzamiento despojaron los símbolos. Podemos cambiarlo en la configuración de compilación del proyecto "Eliminar símbolos de depuración durante la copia" a NO.
Más detalles ver esta publicación
fuente
atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c
y conseguir que-[HUDWindow sizedHUDBackground] (in myApp) + 1197
Después de leer todas estas respuestas aquí para simbolizar un registro de bloqueo (y finalmente tener éxito), creo que faltan algunos puntos aquí que son realmente importantes para determinar por qué la invocación de symbolicatecrash no produce una salida simbolizada.
Hay 3 activos que tienen que encajar cuando simbolizan un registro de bloqueo:
example.crash
, exportado desde el organizador de XCode o recibido desde iTunes Connect)..app
paquete (es decirexample.app
) que contiene el binario de la aplicación que pertenece al registro de fallas. Si tiene un.ipa
paquete (es decirexample.ipa
), puede extraer el.app
paquete descomprimiendo el.ipa
paquete (es decirunzip example.ipa
). Posteriormente, el.app
paquete reside en laPayload/
carpeta extraída ..dSYM
paquete que contiene los símbolos de depuración (es decirexample.app.dSYM
)Antes de comenzar la simbolización, debe verificar si todos esos artefactos coinciden, lo que significa que el registro de bloqueo pertenece al binario que tiene y que los símbolos de depuración son los que se producen durante la construcción de ese binario.
Cada binario se refiere por un UUID que se puede ver en el archivo de registro de bloqueo:
En este extracto, el registro de fallas pertenece a una imagen binaria de la aplicación llamada example.app/example con UUID
aa5e633efda8346cab92b01320043dc3
.Puede verificar el UUID del paquete binario que tiene con dwarfdump:
Luego, debe verificar si los símbolos de depuración que tiene también pertenecen a ese binario:
En este ejemplo, todos los activos se unen y debería poder simbolizar su stacktrace.
Continuando con el
symbolicatecrash
guión:En Xcode 8.3 deberías poder invocar el script a través de
Si no está allí, puede ejecutar un
find . -name symbolicatecrash
en su directorio Xcode.app para encontrarlo.Como puede ver, no hay más parámetros dados. Entonces, el script tiene que encontrar los símbolos binarios y de depuración de su aplicación ejecutando una búsqueda destacada. Busca los símbolos de depuración con un índice específico llamado
com_apple_xcode_dsym_uuids
. Puedes hacer esta búsqueda tú mismo:resp.
La primera invocación destacada le brinda todos los paquetes indexados de dSYM y la segunda le brinda los
.dSYM
paquetes con un UUID específico. Si Spotlight no encuentra su.dSYM
paquetesymbolicatecrash
, tampoco lo hará. Si hace todo esto, por ejemplo, en una subcarpeta de su~/Desktop
foco, debería poder encontrar todo.Si
symbolicatecrash
encuentra su.dSYM
paquete, debería haber una línea como la siguiente ensymbolicate.log
:Para encontrar su
.app
paquete, se invoca una búsqueda destacada como la siguientesymbolicatecrash
:Si
symbolicatecrash
encuentra su.app
paquete, debe haber el siguiente extracto ensymbolicate.log
:Si encuentra todos esos recursos
symbolicatecrash
, debe imprimir la versión simbolizada de su registro de fallas.Si no, puede pasar sus archivos dSYM y .app directamente.
Nota: La traza inversa simbolizada se enviará a la terminal, no
symbolicate.log
.fuente
No crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
DEVELOPER_DIR
variable de entorno si el script se queja de que de este modo:export DEVELOPER_DIR=`xcode-select --print-path`
. Agregué esta línea a mi~/.bash_profile
. Ver stackoverflow.com/q/11682789/350761<SYMBOL_PATH> Additional search paths in which to search for symbol rich binaries
-o | --output <OUTPUT_FILE> The symbolicated log will be written to OUTPUT_FILE. Defaults to "-" (i.e. stdout) if not specified
-d | --dsym <DSYM_BUNDLE> Adds additional dSYM that will be consulted if and when a binary's UUID matches (may be specified more than once)
Con la última versión de Xcode (3.2.2), puede arrastrar y soltar los informes de fallas en la sección Registros de dispositivos del Organizador de Xcode y se simbolizarán automáticamente para usted. Creo que esto funciona mejor si compiló esa versión de la aplicación usando Build & Archive (también parte de Xcode 3.2.2)
fuente
Hice esto con éxito, usando los siguientes pasos.
Paso 1: Cree una carpeta en el escritorio, le doy un nombre a "CrashReport" y pongo tres archivos ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash").
Paso 2: Abra el Finder y vaya a Aplicaciones, donde encontrará la aplicación Xcode, haga clic derecho sobre esto y haga clic en "Mostrar contenido del paquete", luego siga esta ruta simple. "Contenido-> Desarrollador-> Plataformas-> iPhoneOS.platform-> Desarrollador-> Biblioteca-> PrivateFrameworks-> DTDeviceKit.framework -> Versiones-> A-> Recursos"
O
"Contenido-> Desarrollador-> Plataformas-> iPhoneOS.platform-> Desarrollador-> Biblioteca-> PrivateFrameworks-> DTDeviceKitBase.framework -> Versiones-> A-> Recursos"
O
Para Xcode 6 y superior, la ruta es Aplicaciones / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versions / A / Resources
Cuando encuentre el archivo "symbolicatecrash", cópielo y péguelo en la carpeta "CrashReport".
Paso 3: inicie la terminal, ejecute estos 3 comandos
cd / Users / mac38 / Desktop / CrashReport y presione el botón Enter
export DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer" y presione Entrar
fuente
Unknown option: A
símbolo Symbolictecrash, pero el proceso se ejecutó de todos modosPasos para simbolizar un informe de bloqueo automáticamente usando XCode:
ACTUALIZADO PARA XCODE 9
Conecte cualquier dispositivo iOS a su Mac (sí, uno físico, sí, sé que esto es estúpido)
Elija "Dispositivos" en el menú "Ventana"
Haga clic en su dispositivo a la izquierda y VER REGISTRO DE DISPOSITIVOS a la derecha
Espere. Puede demorar un minuto en aparecer. Tal vez hacerlo
Command-A
entoncesDelete
acelere esto.Indocumentado paso fundamental: cambiar el nombre del informe de error que recibió de iTunesConnect de
.txt
extensión a.crash
extensiónArrastre el informe de bloqueo a esa área a la izquierda
Y luego Xcode simbolizará el informe del bloqueo y mostrará los resultados.
Fuente: https://developer.apple.com/library/ios/technotes/tn2151/_index.html
fuente
Uso Airbrake en mis aplicaciones, lo que hace un buen trabajo de registro remoto de errores.
Así es como los simbolizo con atos si la traza inversa lo necesita:
En Xcode (4.2) vaya al organizador, haga clic derecho en el archivo desde el que se generó el archivo .ipa.
En Terminal, cd en xcarchive por ejemplo
MyCoolApp 10-27-11 1.30 PM.xcarchive
Ingrese lo siguiente
atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(no olvide las comillas simples)No incluyo mi símbolo en esa llamada. Lo que obtienes es un cursor de bloque en una línea vacía.
Luego copio / pego mi código de símbolo en ese cursor de bloque y presiono enter. Verás algo como:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
Regresó a un cursor de bloque y puede pegar otros símbolos.
Poder atravesar un elemento de la traza inversa sin volver a ingresar el primer bit es un buen ahorro de tiempo.
¡Disfrutar!
fuente
También puse dsym, el paquete de aplicaciones y el registro de bloqueos juntos en el mismo directorio antes de ejecutar el bloqueo simbólico
Luego uso esta función definida en mi .profile para simplificar la ejecución de symbolicatecrash:
Los argumentos agregados allí pueden ayudarte.
Puede verificar para asegurarse de que Spotlight "ve" sus archivos dism ejecutando el comando:
Busque el dsym que tiene en su directorio.
NOTA: a partir de la última versión de Xcode, ya no hay un directorio de desarrolladores. Puedes encontrar esta utilidad aquí:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers ions / A / Resources / symbolicatecrash
fuente
Solo una respuesta simple y actualizada para xcode 6.1.1.
PASOS
1.Xcode> Ventana> Dispositivos.
2. Seleccione un dispositivo de una lista de dispositivos en la sección DISPOSITIVOS.
3. Seleccione Ver registros del dispositivo.
4.En la sección Todos los registros, puede arrastrar y soltar directamente el informe.
5.Xcode simbolizará automáticamente el informe de bloqueo por usted.
6.Puede encontrar el informe de bloqueo simbolizado haciendo coincidir su fecha / hora con la fecha / hora mencionada en su informe de bloqueo.
fuente
A pesar de que había estado desarrollando aplicaciones durante algunos años, esta era la primera vez que depuraba un archivo binario y me sentía como un completo NOOB averiguando dónde estaban todos los archivos, es decir, dónde están * .app * .dSYM y los registros de bloqueo. Tuve que leer varias publicaciones para resolverlo. La imagen vale más que mil palabras y espero que esta publicación ayude a cualquier otra persona en el futuro.
1- Primero ve a itunesconnect y descarga tus registros de fallas. NOTA: en la mayoría de los casos, puede obtener algo como "Se han enviado muy pocos informes para que se muestre un informe". Básicamente, no hay suficientes usuarios que hayan enviado informes de registro de fallas a Apple, en cuyo caso no puede hacer mucho en ese momento.
2- Ahora, si no ha cambiado su código desde que envió su binario a Apple, inicie Xcode para ese proyecto y vuelva a hacer Producto -> Archivar. De lo contrario, solo encuentre su último binario enviado y haga clic derecho sobre él.
fuente
En Xcode 4.2.1, abra Organizer , luego vaya a Library / Device Logs y arrastre su archivo .crash a la lista de registros de bloqueo. Se simbolizará para usted después de unos segundos.
Tenga en cuenta que debe usar la misma instancia de Xcode en la que se archivó la compilación original (es decir, el archivo para su compilación debe existir en Organizer ).
fuente
Con Xcode 4, la tarea es aún más simple:
y voilá. El archivo de registro se importa y simboliza automáticamente para usted. Siempre que haya archivado la compilación utilizando Xcode -> Producto -> Archivar primero.
fuente
El mágico Xcode Organizer no es tan mágico para simbolizar mi aplicación. No obtuve ningún símbolo para los informes de fallos que recibí de Apple de un envío fallido de la aplicación.
Intenté usar la línea de comandos, colocando el informe de bloqueo en la misma carpeta que el archivo .app (que envié a la tienda) y el archivo .dSYM:
Esto solo proporcionó símbolos para mi aplicación y no el código básico de la base, pero fue mejor que el volcado de números que Organizer me está dando y fue suficiente para que encontrara y solucionara el bloqueo que tenía mi aplicación. Si alguien sabe cómo extender esto para obtener los símbolos de la Fundación, se lo agradeceríamos.
fuente
En mi caso, estaba arrastrando informes de fallos directamente desde Mail al Organizador. Por alguna razón, eso evitó que los informes de bloqueo se simbolizaran (me encantaría saber por qué).
Copiar primero los informes de fallos en el Escritorio y luego arrastrarlos desde allí al Organizador los simbolizó correctamente.
Caso muy específico, lo sé. Pero pensé en compartir por si acaso.
fuente
Aquí hay otro problema que tengo con symbolicatecrash: no funcionará con aplicaciones que tengan espacios en su paquete (es decir, 'Test App.app'). Tenga en cuenta que no creo que pueda tener espacios en su nombre al enviar, por lo que debe eliminarlos de todos modos, pero si ya tiene bloqueos que deben analizarse, aplique el parche symbolicatecrash (4.3 GM) como tal:
fuente
Para aquellos que usan Airbrake, hay una respuesta sólida arriba, pero no funcionaría para mí sin ajustar:
Funciona para algunas direcciones de memoria pero no para otras, no estoy seguro de por qué ...
fuente
La combinación que funcionó para mí fue:
Utilizando atos , no pude resolver la información de símbolo correcta con las direcciones y las compensaciones que estaban en el informe de bloqueo. Cuando hice esto, veo algo más significativo, y parece ser una traza legítima de la pila.
fuente
Tuve que hacer un montón de pirateo de la secuencia de comandos Symbolicatecrash para que se ejecute correctamente.
Por lo que puedo decir, symbolicatecrash en este momento requiere que el .app esté en el mismo directorio que el .dsym. Utilizará el .dsym para localizar el .app, pero no utilizará el dsym para encontrar los símbolos.
Debería hacer una copia de su símbolo de bloqueo antes de intentar estos parches que harán que se vea en el dsym:
Alrededor de la línea 212 en la función getSymbolPathFor_dsymUuid
Alrededor de la línea 265 en la función matchUUID
fuente
Esto es simple, después de buscar mucho, encontré pasos claros para simbolizar todo el archivo de registro de fallas.
feliz codificación,
Riyaz
fuente
Prefiero un script que simbolice todos mis registros de bloqueo.
Condiciones previas
Crea una carpeta y coloca 4 cosas:
symbolicatecrash
script perl: hay muchas respuestas SO que indican su ubicaciónEl archivo de la compilación que coincide con los bloqueos (de Xcode Organizer. Simple como
Show in Finder
y copia) [No estoy seguro de que sea necesario]Todos los
xccrashpoint
paquetes: (desde Xcode Organizer.Show in Finder
, Puede copiar todos los paquetes en el directorio, o el único punto xccrash que le gustaría simbolizar)Agregue ese script corto al directorio:
La secuencia de comandos
Cuando ejecutas el script, obtendrás 2 directorios.
allCrashes
- Todos los accidentes de todos losxccrashpoint
estarán allí.symboledCrashes
- los mismos bloqueos pero ahora con todos los símbolos.NO necesita limpiar el directorio de bloqueos anteriores antes de ejecutar el script. Se limpiará automáticamente. ¡buena suerte!
fuente
Descubrí que la mayoría de las alternativas propuestas no funcionaban en el último XCode (probado con Xcode 10). Por ejemplo, no tuve suerte arrastrando y soltando registros .crash en Xcode -> Organizador -> Registros del dispositivo -view.
Recomiendo usar la herramienta Symbolicator https://github.com/agentsim/Symbolicator
fuente
Para simbolizar bloqueos, Spotlight debe poder encontrar el archivo .dSYM que se generó al mismo tiempo que el binario que envió a Apple. Como contiene la información del símbolo, no tendrá suerte si no está disponible.
fuente
Me enojé un poco por el hecho de que nada aquí parece "simplemente funcionar", así que investigué un poco y el resultado es:
Configurar: QuincyKit back-end que recibe informes. No se configuró ninguna simbolización, ya que ni siquiera podía comenzar a entender qué sugerían que hiciera para que funcionara.
La solución: descargue los informes de fallos del servidor en línea. Se llaman 'crash' y por defecto van a la carpeta ~ / Downloads /. Con eso en mente, este script "hará lo correcto" y los informes de fallas irán a Xcode (Organizador, registros del dispositivo) y se realizará la simbolización.
La secuencia de comandos:
Las cosas se pueden automatizar a donde puede arrastrar y soltar en Xcode Organizer haciendo dos cosas si usa QuincyKit / PLCR.
En primer lugar, debe editar el script remoto admin / actionapi.php ~ línea 202. Parece que no tiene la marca de tiempo correcta, por lo que el archivo termina con el nombre 'crash' que Xcode no reconoce (quiere algo punto crash):
En segundo lugar, en el lado de iOS en QuincyKit BWCrashReportTextFormatter.m ~ línea 176, cambie
@"[TODO]"
a@"TODO"
para evitar los caracteres malos.fuente
atos está en desuso, por lo que si está ejecutando OSX 10.9 o posterior, es posible que deba ejecutar
xcrun atos
fuente
Me gusta usar Textwrangler para detectar errores en el rechazo binario de carga de una aplicación original. (Los datos del bloqueo se encontrarán en su cuenta de itunesConnect). Utilizando el método anterior de Sachin, copié el original.crash en TextWrangler, luego copié el archivo symbolicatecrash que he creado en otro archivo TextWrangler. La comparación de los dos archivos señala las diferencias. El archivo Symbolicatecrash tendrá diferencias que señalan el número de problemas del archivo y la línea.
fuente
Utilizamos Google Crashlytics para supervisar los registros de fallas, la sensación es muy oportuna y conveniente de usar.
Enlaces de documentos: https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms
Todo sobre Missing dSYMs Fabric incluye una herramienta para cargar automáticamente el dSYM de su proyecto. La herramienta se ejecuta a través de la secuencia de comandos / run, que se agrega a la fase de creación de la secuencia de comandos de ejecución durante el proceso de incorporación. Sin embargo, puede haber ciertas situaciones en las que las cargas de dSYM fallan debido a configuraciones de proyecto únicas o si está utilizando Bitcode en su aplicación. Cuando falla una carga, Crashlytics no puede simbolizar y mostrar bloqueos, y aparecerá una alerta de "Falta dSYM" en el panel de control de Fabric.
Los dSYM que faltan se pueden cargar manualmente siguiendo los pasos que se detallan a continuación.
Nota: Como alternativa a la herramienta de carga automática dSYM, Fabric proporciona una herramienta de línea de comandos (símbolos de carga) que puede configurarse manualmente para ejecutarse como parte del proceso de construcción de su proyecto. Consulte la sección de símbolos de carga a continuación para obtener instrucciones de configuración.
...
fuente