ios - traducir - Cómo simbolizar el registro de bloqueo Xcode?
simbolos de proposiciones (8)
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?
Asegúrese de que el nombre de su aplicación Xcode no contenga ningún espacio. Esta fue la razón por la que no funcionó para mí. Entonces /Applications/Xcode 6.1.1.app
/Applications/Xcode.app
funciona, mientras que /Applications/Xcode 6.1.1.app
no funciona.
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:
El archivo binario y dSYM de la aplicación que falla.
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.
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.
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:
Cree una carpeta separada, copie
Foo.app
yFoo.app.dSYM
delFoo.app.dSYM
.xcarchive
correspondiente en la carpeta. Copie también el informe.crash
en la carpeta.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
).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
.
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)
Tome cualquier archivo .xcarchive. Si tiene uno de antes, puede usarlo. Si no tiene uno, cree uno ejecutando el Producto> Archivo desde Xcode.
Haga clic derecho en el archivo .xcarchive y seleccione ''Mostrar contenido del paquete''
Copie el archivo dsym (de la versión de la aplicación que se colgó) a la carpeta dSYMs
Copie el archivo .app (de la versión de la aplicación que se colgó) a la carpeta Products> Applications
Edite Info.plist y edite CFBundleShortVersionString y CFBundleVersion en el diccionario ApplicationProperties. Esto te ayudará a identificar el archivo más tarde
Haga doble clic en .xcarchive para importarlo a Xcode. Debería abrir Organizer.
Regrese al registro de bloqueo (en la ventana Dispositivos en Xcode)
Arrastre su archivo .crash allí (si no está presente)
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''
Ok, me di cuenta de que puedes hacer esto:
- En
Xcode > Window > Devices
, seleccione un iPhone / iPad / etc conectado arriba a la izquierda. - Ver registros de dispositivos
- Todos los registros
Es probable que tengas muchos registros allí, y para que sea más fácil encontrar el registro importado más adelante, puedes continuar y eliminar todos los registros en este punto ... a menos que signifiquen dinero para ti. O a menos que sepa el momento exacto en que ocurrió el bloqueo, debe escribirse en el archivo de todos modos ... Soy flojo, así que elimino todos los registros antiguos (esto en realidad me llevó un tiempo).
- Simplemente arrastre y suelte su archivo en esa lista. Funcionó para mí
Para mí, el archivo .crash fue suficiente. Sin archivo .dSYM y archivo .app.
Ejecuté estos dos comandos en el mac donde construí el archivo y funcionó:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash
Si tiene .dSYM y el archivo .crash en la misma subcarpeta, estos son los pasos que puede seguir:
- 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).
- 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).
- 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
También puede referirse a este, he escrito el procedimiento paso a paso de la Re-Simbolización Manual Crash.
PASO 1
Mueva todos los archivos anteriores (MyApp.app, MyApp-dSYM.dSYM y MyApp-Crash-log.crash) a una Carpeta con un nombre conveniente donde quiera que vaya usando Terminal fácilmente.
Para mí, Desktop es el lugar más fácilmente accesible;) Por lo tanto, he movido estos tres archivos a una carpeta MyApp at Desktop.
PASO 2
Ahora es su turno de Finder, vaya a la ruta de seguir lo que sea aplicable para su versión de XCODE.
Xcode 8, Xcode 9 / /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
/ /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
Xcode 7.3 / /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
XCode 7 / /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
Xcode 6 / /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
/ /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Más Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Xcode 6 Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
O Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
Copie el archivo symbolicatecrash desde esta ubicación y péguelo en Desktop / MyApp (Espere ... No me sigan ciegamente, estoy pegando el archivo sybolicatecrash en la carpeta MyApp, uno que creó en el paso uno en su ubicación favorita, con tres archivos. )
PASO 3
Abra Terminal y CD en la carpeta MyApp.
cd Desktop/MyApp — Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)
- Presione Entrar
./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM
- Presione Entrar
Eso es !! Los registros simbolizados están en su terminal ... ¿ahora qué está esperando? Ahora simplemente, descubre el error y resuélvelo;)
Happy Coding !!!