[Ios] Cómo simbolizar el registro de bloqueo Xcode?


Answers

Escribir esta respuesta tanto para la comunidad como para mí.

Si alguna vez hay problemas que simbolizan un informe de bloqueo, uno puede superarlos de la siguiente manera:

  1. Cree una carpeta separada, copie Foo.app y Foo.app.dSYM del Foo.app.dSYM .xcarchive correspondiente en la carpeta. Copie también el informe .crash en la carpeta.

  2. Abra el informe de bloqueo en TextEdit o en otro lugar, vaya a la sección Binary Images: y copie allí la primera dirección (p. Ej., 0xd7000 ).

  3. cd en la carpeta. Ahora puede ejecutar el siguiente comando:

    xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb

Esto simbolizará el símbolo en la dirección 0x0033f9bb . Asegúrese de elegir el valor correcto para la opción -arch (puede obtenerse de la primera línea en la sección Binary Images: , o descifrarse del Hardware Model: en el informe de fallos y en los archivos admitidos de la aplicación).

También puede copiar las direcciones necesarias (por ejemplo, una pila de llamadas de subprocesos) desde el informe de bloqueo directamente en un archivo de texto (en TextEdit, mantenga presionada la opción y seleccione el bloque de texto necesario, o copie y corte) para obtener algo como esto:

0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3

Ahora puede guardar esto en un archivo de texto, por ejemplo, addr.txt , y ejecutar el siguiente comando:

xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt

Esto dará una buena simbolización para todas las direcciones a la vez.

PD

Antes de hacer lo anterior, vale la pena verificar que todo esté configurado correctamente (ya que atos informará alegremente algo para básicamente cualquier dirección suministrada).

Para realizar la comprobación, abra el informe de fallos y vaya al final de la pila de llamadas para el Thread 0 . La primera línea del final para mostrar su aplicación (generalmente la segunda), por ejemplo:

34  Foo                    0x0033f9bb 0xd7000 + 2525627

debería ser la llamada main() . 0x0033f9bb la dirección ( 0x0033f9bb en este caso) como se describe arriba debería confirmar que esto es de hecho main() y no algún método o función aleatoria.

Si la dirección no es la de main() , verifique su dirección de carga ( -l opción) y arch (opción de -arch ).

PPS

Si lo anterior no funciona debido a un código de bits , descargue dSYM para su compilación desde iTunes Connect, extraiga el binario ejecutable de dSYM (Finder> Show Package Contents), cópielo en el directorio y úselo (es decir, Foo ) como el argumento para atos , en lugar de Foo.app/Foo .

Question

El organizador de Xcode 5 tenía una vista que enumeraría todos los registros de fallos. y podríamos arrastrar registros de bloqueo de caída aquí. Pero desde Xcode 6, sé que han movido los dispositivos de la organización y tienen una nueva ventana para el mismo. Pero no encuentro un lugar donde vea los registros de fallos que arrastro y elimino en Xcode 5 después de subir a Xcode 6. ¿Alguien sabe la respuesta?




De los documentos de Apple:

Simbolizar informes de fallas con Xcode Xcode intentará simbolizar automáticamente todos los informes de fallas que encuentre. Todo lo que necesita hacer para la simbolización es agregar el informe de fallos al Xcode Organizer.

  • Conecte un dispositivo iOS a su Mac
  • Elija "Dispositivos" en el menú "Ventana"
  • En la sección "DISPOSITIVOS" en la columna de la izquierda, elige un dispositivo
  • Haga clic en el botón "Ver registros del dispositivo" en la sección "Información del dispositivo" en el panel derecho
  • Arrastre su informe de fallos a la columna izquierda del panel presentado
  • Xcode simbolizará automáticamente el informe de fallas y mostrará los resultados Para simbolizar un informe de fallas, Xcode necesita poder localizar lo siguiente:

    1. El archivo binario y dSYM de la aplicación que falla.

    2. Los archivos binarios y dSYM para todos los marcos personalizados con los que se vincula la aplicación. Para los marcos que se crearon desde el origen con la aplicación, sus archivos dSYM se copian en el archivo junto con el archivo dSYM de la aplicación. Para los marcos que fueron construidos por un tercero, tendrá que pedirle al autor el archivo dSYM.

    3. Símbolos para el sistema operativo en el que se ejecutaba esa aplicación cuando se bloqueaba. Estos símbolos contienen información de depuración para los marcos incluidos en una versión específica del sistema operativo (p. Ej., IOS 9.3.3). Los símbolos de SO son específicos de la arquitectura; una versión de iOS para dispositivos de 64 bits no incluirá los símbolos de armv7. Xcode copiará automáticamente los símbolos del sistema operativo de cada dispositivo que conecte a su Mac.

Si falta alguno de estos, es posible que Xcode no pueda simbolizar el informe de fallas, o que solo simbolice parcialmente el informe de fallas.




Hay una manera más fácil de usar Xcode (sin usar herramientas de línea de comandos y buscando direcciones una a la vez)

  1. Tome cualquier archivo .xcarchive. Si tiene uno de antes, puede usarlo. Si no tiene uno, cree uno ejecutando el Producto> Archivo desde Xcode.

  2. Haga clic derecho en el archivo .xcarchive y seleccione 'Mostrar contenido del paquete'

  3. Copie el archivo dsym (de la versión de la aplicación que se colgó) a la carpeta dSYMs

  4. Copie el archivo .app (de la versión de la aplicación que se colgó) a la carpeta Products> Applications

  5. Edite Info.plist y edite CFBundleShortVersionString y CFBundleVersion en el diccionario ApplicationProperties. Esto te ayudará a identificar el archivo más tarde

  6. Haga doble clic en .xcarchive para importarlo a Xcode. Debería abrir Organizer.

  7. Regrese al registro de bloqueo (en la ventana Dispositivos en Xcode)

  8. Arrastre su archivo .crash allí (si no está presente)

  9. Todo el registro de bloqueo debe ser simbolizado. De lo contrario, haga clic con el botón derecho y seleccione 'Volver a simbolizar registro de bloqueo'




Si tiene .dSYM y el archivo .crash en la misma subcarpeta, estos son los pasos que puede seguir:

  1. Al observar la traza inversa en el archivo .crash, tenga en cuenta el nombre de la imagen binaria en la segunda columna y la dirección en la tercera columna (por ejemplo, 0x00000001000effdc en el ejemplo a continuación).
  2. Justo debajo del backtrace, en la sección "Imágenes binarias", anote el nombre de la imagen, la arquitectura (por ejemplo, arm64) y la dirección de carga (0x1000e4000 en el ejemplo siguiente) de la imagen binaria (por ejemplo, TheElements).
  3. Ejecuta lo siguiente:

$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc -[AtomicElementViewController myTransitionDidStop:finished:context:]

Fuente https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS : https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS




Links