Análisis de fallos en iOS/macOS/visionOS
Para fallos en native (iOS/macOS), Unity (iOS/macOS/visionOS) y Unity editor (macOS), consulte las siguientes notas.
Obtener la ubicación del fallo durante el desarrollo
La información necesaria al depurar en XCode se muestra a continuación.

Introduzca bt en lldb para obtener la razón del fallo y la pila de ejecución de código, como se muestra abajo.
(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 ejecución de código contiene contenido relacionado con easyar o libEasyAR.dylib, el fallo puede estar relacionado con EasyAR. Si no existe, hay una alta probabilidad de que el fallo no esté relacionado con EasyAR.
Introduzca 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 abajo.
(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
Obtener la ubicación del fallo durante el desarrollo (Unity)
Al desarrollar aplicaciones con Unity, también puede usar los logs de Unity para analizar fallos.
Los logs de Unity se dividen en logs de Unity editor y logs de Unity player, que pueden obtenerse con los siguientes métodos.
| Entorno Unity | Sistema operativo | Ruta del log |
|---|---|---|
| Editor | macOS | ~/Library/Logs/Unity/Editor.log |
| Player | iOS | Usar la consola lldb de XCode |
| Player | macOS | ~/Library/Logs/Company Name/Product Name/Player.log |
Los logs del editor también pueden abrirse con el comando Open Editor Log del menú superior derecho de la ventana Console.
Las managed exceptions (C#) pueden verse en la ventana Console del Unity editor (Window -> General -> Console en el menú principal de Unity).
Obtener la ubicación del fallo después del lanzamiento
También pueden producirse fallos después del lanzamiento. En ese caso, véalos desde Privacy - Analytics & Improvements - Analytic Data del dispositivo, o recopile crash logs mediante TestFlight y App Store.
El siguiente es un ejemplo de 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
Las pilas de código que contienen easyar incluyen:
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 offset.
La sección Binary Images también muestra que 0x1028b4000 es la dirección de carga del módulo easyar.
Tenga en cuenta que la información del fallo debe incluir tanto la pila de ejecución de código como la dirección de carga del módulo. Debido a ASLR (address space layout randomization), la dirección de carga del módulo de la biblioteca dinámica puede ser diferente en cada ejecución, lo que también hace que las direcciones de código 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 saber dónde falló el programa.
Cuando la pila de ejecución de código contiene contenido relacionado con easyar o libEasyAR.dylib, el fallo puede estar relacionado con EasyAR. Si no existe, hay una alta probabilidad de que el fallo no esté relacionado con EasyAR.
Otra información relacionada con fallos
Números de versión de EasyAR Sense y EasyAR Sense Unity Plugin
Por ejemplo, 4.7.0.11800-cf8e24e30
Community edition/Enterprise edition
Plataforma y arquitectura CPU
iOS
arm64
macOS
x86_64/arm64
visionOS
arm64