Table of Contents

Análisis de bloqueos en iOS/macOS/visionOS

Para bloqueos en aplicaciones nativas (iOS/macOS), Unity (iOS/macOS/visionOS) y el editor de Unity (macOS), consulte las siguientes instrucciones.

Obtención de la ubicación del bloqueo durante el desarrollo

La información necesaria al depurar en XCode se muestra en la siguiente imagen.

crash iOS

Ingrese bt en lldb para obtener la causa del bloqueo y la pila de llamadas, como se muestra a continuación:

(lldb) bt
* thread #11, stop reason = EXC_BAD_ACCESS (code=1, address=0x9c40)
* frame #0: 0x00000001057e7cb0 easyar`___lldb_unnamed_symbol2693$$easyar + 6984
    frame #1: 0x00000001057e5e14 easyar`___lldb_unnamed_symbol2692$$easyar + 276
    frame #2: 0x00000001057e2500 easyar`___lldb_unnamed_symbol2532$$easyar + 360
    frame #3: 0x00000001f3d60bfc libsystem_pthread.dylib`_pthread_start + 320

Cuando la pila de llamadas contiene contenido relacionado con easyar o libEasyAR.dylib, puede indicar que el bloqueo está relacionado con EasyAR; si no está presente, es probable que el bloqueo no esté relacionado con EasyAR.

Ingrese image list easyar o image list libEasyAR.dylib en lldb para obtener la dirección de carga de la biblioteca dinámica, como se muestra a continuación:

(lldb) image list easyar
[  0] DF06BDD8-A8AF-3982-897D-A906EE229A4F 0x0000000105730000 /Users/<user>/Library/Developer/Xcode/DerivedData/helloar-bpvpobshgxnnwwdiryfjufioysag/Build/Products/Debug-iphoneos/helloar.app/Frameworks/easyar.framework/easyar

Obtención de la ubicación del bloqueo durante el desarrollo (Unity)

Al desarrollar aplicaciones con Unity, también puede utilizar los registros de Unity para analizar bloqueos.

Los registros de Unity se dividen en registros del editor de Unity y registros del reproductor Unity, y se pueden obtener mediante los siguientes métodos.

Entorno de Unity Sistema operativo Ubicación del registro
Editor macOS ~/Library/Logs/Unity/Editor.log
Reproductor iOS Usar la consola lldb de XCode
Reproductor macOS ~/Library/Logs/Company Name/Product Name/Player.log

El registro del editor también se puede abrir mediante el comando Open Editor Log en el menú superior derecho de la ventana Console.

Las excepciones administradas (C#) se pueden ver en la ventana Console del editor de Unity (Window -> General -> Console en el menú principal de Unity).

Obtención de la ubicación del bloqueo después del lanzamiento

Después del lanzamiento, también pueden ocurrir bloqueos. En este caso, consulte los registros de bloqueo desde Privacy - Analytics & Improvements - Analytic Data del dispositivo o recopílelos a través de TestFlight y App Store recopilando informes de bloqueos.

Aquí hay un ejemplo de un bloqueo:

Incident Identifier: 5916E252-D8C2-43C3-B583-7E38399597C9
CrashReporter Key:   2075d595d8d96cf07913a12798d5e0aba79c5358
Hardware Model:      iPhone9,2
Process:             ARManualEditorDemo [2352]
Path:                /private/var/containers/Bundle/Application/ED9F6959-612A-4595-A7B9-3F573B5097DD/ARManualEditorDemo.app/ARManualEditorDemo
Identifier:          cn.easyar.demo.ARManualEditor
Version:             6 (2.0.1)
Code Type:           ARM-64 (Native)
Role:                Non UI
Parent Process:      launchd [1]
Coalition:           cn.easyar.demo.ARManualEditor [1831]


Date/Time:           2019-09-17 16:21:13.1246 +0800
Launch Time:         2019-09-17 16:08:08.3605 +0800
OS Version:          iPhone OS 12.4 (16G77)
Baseband Version:    5.70.01
Report Version:      104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000019d7e86fc
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   JavaScriptCore                	0x000000019d7e86fc WTFCrashWithInfo+ 2471676 (int, char const*, char const*, int) + 20
1   JavaScriptCore                	0x000000019dd85da0 llint_slow_path_get_by_val + 6032
2   JavaScriptCore                	0x000000019d7a25cc llint_entry + 34380
...
13  JavaScriptCore                	0x000000019d799cec vmEntryToJavaScript + 268
14  JavaScriptCore                	0x000000019dccb4d0 JSC::Interpreter::executeCall+ 7595216 (JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 424
15  JavaScriptCore                	0x000000019dead560 JSC::profiledCall+ 9569632 (JSC::ExecState*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 188
16  JavaScriptCore                	0x000000019d7df170 JSObjectCallAsFunction + 376
17  EasyARPlayer                  	0x000000010353d284 0x10326c000 + 2953860
18  EasyARPlayer                  	0x000000010363c880 0x10326c000 + 3999872
19  EasyARPlayer                  	0x000000010364ee1c 0x10326c000 + 4075036
20  EasyARPlayer                  	0x0000000103295388 0x10326c000 + 168840
21  GLKit                         	0x00000001a337b91c -[GLKView _display:] + 256
...
33  libdyld.dylib                 	0x0000000195e468e0 start + 4

...

Thread 8:
0   libsystem_kernel.dylib        	0x0000000195f92ee4 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	0x000000019600dcf8 _pthread_cond_wait$VARIANT$mp + 636
2   easyar                        	0x0000000102fba7c0 0x1028b4000 + 7366592
3   easyar                        	0x0000000102e7627c 0x1028b4000 + 6038140
4   easyar                        	0x0000000102e452e8 0x1028b4000 + 5837544
5   libsystem_pthread.dylib       	0x00000001960152c0 _pthread_body + 128
6   libsystem_pthread.dylib       	0x0000000196015220 _pthread_start + 44
7   libsystem_pthread.dylib       	0x0000000196018cdc thread_start + 4

...

Binary Images:
0x1023e4000 - 0x1024f3fff ARManualEditorDemo arm64  <0fb0d9b7d18c3e2ebf44e950a68af61f> /var/containers/Bundle/Application/ED9F6959-612A-4595-A7B9-3F573B5097DD/ARManualEditorDemo.app/ARManualEditorDemo
...
0x1028b4000 - 0x10310bfff easyar arm64  <cb52ccf821e33255a0c30ca2422d2862> /var/containers/Bundle/Application/ED9F6959-612A-4595-A7B9-3F573B5097DD/ARManualEditorDemo.app/Frameworks/easyar.framework/easyar
...

EOF

Entre ellos, la pila de llamadas que contiene easyar es:

2   easyar                        	0x0000000102fba7c0 0x1028b4000 + 7366592
3   easyar                        	0x0000000102e7627c 0x1028b4000 + 6038140
4   easyar                        	0x0000000102e452e8 0x1028b4000 + 5837544

Aquí, 0x0000000102fba7c0 es la dirección virtual del código en memoria, 0x1028b4000 es la dirección de carga del módulo easyar, y 7366592 es el desplazamiento.

En la sección Binary Images, también se puede ver que 0x1028b4000 es la dirección de carga del módulo easyar.

Es importante tener en cuenta que la información del bloqueo debe incluir tanto la pila de llamadas como la dirección de carga del módulo. Debido a ASLR (aleatorización del diseño del espacio de direcciones), la dirección de carga del módulo de la biblioteca dinámica puede cambiar en cada ejecución, lo que hace que las direcciones de código también cambien dinámicamente. Solo conociendo el valor relativo entre la dirección de código en la pila y la dirección de carga del módulo de la biblioteca dinámica, se puede determinar en qué ubicación ocurrió el bloqueo.

Cuando la pila de llamadas contiene contenido relacionado con easyar o libEasyAR.dylib, puede indicar que el bloqueo está relacionado con EasyAR; si no está presente, es probable que el bloqueo no esté relacionado con EasyAR.

Otra información relacionada con bloqueos

  • Número de versión de EasyAR Sense y EasyAR Sense Unity Plugin

    Ejemplo: 4.7.0.11800-cf8e24e30

  • Edición Community/Enterprise

  • Plataforma y arquitectura de CPU

    • iOS

      arm64

    • macOS

      x86_64/arm64

    • visionOS

      arm64