Analyse des crashs sur iOS/macOS/visionOS
Pour les crashs sur native (iOS/macOS), Unity (iOS/macOS/visionOS) et Unity editor (macOS), consultez les notes suivantes.
Obtenir l'emplacement du crash pendant le développement
Les informations nécessaires lors du débogage dans XCode sont indiquées ci-dessous.

Saisissez bt dans lldb pour obtenir la raison du crash et la pile d'exécution du code, comme ci-dessous.
(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
Lorsque la pile d'exécution du code contient des éléments liés à easyar ou libEasyAR.dylib, le crash peut être lié à EasyAR. Sinon, il est très probable que le crash ne soit pas lié à EasyAR.
Saisissez image list easyar ou image list libEasyAR.dylib dans lldb pour obtenir l'adresse de chargement de la bibliothèque dynamique, comme ci-dessous.
(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
Obtenir l'emplacement du crash pendant le développement (Unity)
Lors du développement d'applications avec Unity, vous pouvez également utiliser les logs Unity pour analyser les crashs.
Les logs Unity sont divisés en logs Unity editor et logs Unity player, qui peuvent être obtenus comme suit.
| Environnement Unity | Système d'exploitation | Chemin du log |
|---|---|---|
| Editor | macOS | ~/Library/Logs/Unity/Editor.log |
| Player | iOS | Utiliser la console lldb de XCode |
| Player | macOS | ~/Library/Logs/Company Name/Product Name/Player.log |
Les logs editor peuvent également être ouverts avec la commande Open Editor Log dans le menu en haut à droite de la fenêtre Console.
Les managed exceptions (C#) peuvent être consultées dans la fenêtre Console de Unity editor (Window -> General -> Console dans le menu principal Unity).
Obtenir l'emplacement du crash après publication
Des crashs peuvent également se produire après publication. Dans ce cas, consultez-les sur l'appareil dans Privacy - Analytics & Improvements - Analytic Data, ou collectez les crash logs via TestFlight et App Store.
Voici un exemple de crash:
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
Les piles de code contenant easyar comprennent :
2 easyar 0x0000000102fba7c0 0x1028b4000 + 7366592
3 easyar 0x0000000102e7627c 0x1028b4000 + 6038140
4 easyar 0x0000000102e452e8 0x1028b4000 + 5837544
Ici, 0x0000000102fba7c0 est l'adresse virtuelle du code en mémoire, 0x1028b4000 est l'adresse de chargement du module easyar, et 7366592 est l'offset.
La section Binary Images montre également que 0x1028b4000 est l'adresse de chargement du module easyar.
Notez que les informations de crash doivent inclure à la fois la pile d'exécution du code et l'adresse de chargement du module. À cause d'ASLR (address space layout randomization), l'adresse de chargement du module de bibliothèque dynamique peut différer à chaque exécution, ce qui fait également varier dynamiquement les adresses de code. Ce n'est qu'en connaissant la valeur relative entre l'adresse de code dans la pile et l'adresse de chargement du module de bibliothèque dynamique que l'on peut déterminer où le programme a crashé.
Lorsque la pile d'exécution du code contient des éléments liés à easyar ou libEasyAR.dylib, le crash peut être lié à EasyAR. Sinon, il est très probable que le crash ne soit pas lié à EasyAR.
Autres informations liées aux crashs
Numéros de version d'EasyAR Sense et EasyAR Sense Unity Plugin
Par exemple, 4.7.0.11800-cf8e24e30
Community edition/Enterprise edition
Plateforme et architecture CPU
iOS
arm64
macOS
x86_64/arm64
visionOS
arm64