Table of Contents

Analyse de crash sur iOS/macOS/visionOS

Concernant les crashs sur natif (iOS/macOS), Unity (iOS/macOS/visionOS) et l'éditeur Unity (macOS), veuillez vous référer aux instructions ci-dessous.

Obtention de l'emplacement du crash en développement

Les informations nécessaires lors du débogage dans XCode sont illustrées dans la figure ci-dessous.

crash iOS

En tapant bt dans lldb, vous pouvez obtenir la cause du crash et la pile d'appels, comme suit

(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 le contenu lié à easyar ou libEasyAR.dylib est présent dans la pile d'appels, cela peut indiquer que le crash est lié à EasyAR ; s'il est absent, il est fort probable que le crash ne soit pas lié à EasyAR.

En tapant image list easyar ou image list libEasyAR.dylib dans lldb, vous pouvez obtenir l'adresse de chargement de la bibliothèque dynamique, comme suit

(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 

Obtention de l'emplacement du crash en développement (Unity)

Lors du développement d'applications avec Unity, vous pouvez également utiliser les journaux Unity pour analyser les crashs.

Les journaux Unity sont divisés en journaux de l'éditeur Unity et journaux du lecteur Unity, accessibles comme suit.

Environnement Unity Système d'exploitation Emplacement du journal
Éditeur macOS ~/Library/Logs/Unity/Editor.log
Lecteur iOS Utiliser la console lldb de XCode
Lecteur macOS ~/Library/Logs/Company Name/Product Name/Player.log

Le journal de l'éditeur peut également être ouvert via la commande Open Editor Log dans le menu en haut à droite de la fenêtre Console.

Les exceptions gérées (C#) peuvent être consultées dans la fenêtre Console de l'éditeur Unity (Window -> General -> Console dans le menu principal de Unity).

Obtention de l'emplacement du crash après la publication

Après la publication, des crashs peuvent également survenir. Dans ce cas, consultez les journaux dans Privacy - Analytics & Improvements - Analytic Data de l'appareil ou collectez les rapports de crash via TestFlight et l'App Store en suivant ces instructions.

Voici un exemple de plantage :

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

Parmi ceux-ci, la pile d'appels contenant easyar est

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 le décalage.

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'appels et l'adresse de chargement du module. En raison de l'ASLR (Address Space Layout Randomization), l'adresse de chargement des modules de bibliothèques dynamiques peut varier à chaque exécution, ce qui entraîne des changements dynamiques des adresses de code. Seule la valeur relative entre l'adresse de code dans la pile d'appels et l'adresse de chargement du module de la bibliothèque dynamique permet de déterminer où le crash s'est produit.

Lorsque le contenu lié à easyar ou libEasyAR.dylib est présent dans la pile d'appels, cela peut indiquer que le crash est lié à EasyAR ; s'il est absent, il est fort probable que le crash ne soit pas lié à EasyAR.

Autres informations relatives aux crashs

  • Numéro de version d'EasyAR Sense et d'EasyAR Sense Unity Plugin

    Par exemple 4.7.0.11800-cf8e24e30

  • Édition Community/Enterprise

  • Plateforme et architecture CPU

    • iOS

      arm64

    • macOS

      x86_64/arm64

    • visionOS

      arm64