Table of Contents

Absturzanalyse unter iOS/macOS/visionOS

Für Abstürze in native (iOS/macOS), Unity (iOS/macOS/visionOS) und Unity editor (macOS) beachten Sie die folgenden Hinweise.

Absturzposition während der Entwicklung ermitteln

Die beim Debuggen in XCode benötigten Informationen sind unten dargestellt.

crash iOS

Geben Sie bt in lldb ein, um die Absturzursache und den Ausführungsstack des Codes zu erhalten, wie unten gezeigt.

(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

Wenn der Ausführungsstack Inhalte zu easyar oder libEasyAR.dylib enthält, kann der Absturz mit EasyAR zusammenhängen. Wenn nicht, ist der Absturz mit hoher Wahrscheinlichkeit nicht mit EasyAR verbunden.

Geben Sie image list easyar oder image list libEasyAR.dylib in lldb ein, um die Ladeadresse der dynamischen Bibliothek zu erhalten, wie unten gezeigt.

(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 

Absturzposition während der Entwicklung ermitteln (Unity)

Bei der Entwicklung von Anwendungen mit Unity können auch Unity-Logs zur Absturzanalyse verwendet werden.

Unity-Logs werden in Unity editor logs und Unity player logs unterteilt und können wie folgt abgerufen werden.

Unity-Umgebung Betriebssystem Log-Pfad
Editor macOS ~/Library/Logs/Unity/Editor.log
Player iOS XCode-lldb-Konsole verwenden
Player macOS ~/Library/Logs/Company Name/Product Name/Player.log

Editor-Logs können auch mit dem Befehl Open Editor Log im Menü oben rechts im Console-Fenster geöffnet werden.

Managed Exceptions (C#) können im Console-Fenster des Unity editor angezeigt werden (Window -> General -> Console im Unity-Hauptmenü).

Absturzposition nach der Veröffentlichung ermitteln

Auch nach der Veröffentlichung können Abstürze auftreten. Sehen Sie diese dann auf dem Gerät unter Privacy - Analytics & Improvements - Analytic Data ein oder sammeln Sie crash logs über TestFlight und App Store.

Das folgende ist ein Beispiel für einen Absturz:

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

Code-Stacks, die easyar enthalten, sind:

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

Hier ist 0x0000000102fba7c0 die virtuelle Adresse des Codes im Speicher, 0x1028b4000 die Modul-Ladeadresse von easyar, und 7366592 der Offset.

Der Abschnitt Binary Images zeigt ebenfalls, dass 0x1028b4000 die Modul-Ladeadresse von easyar ist.

Beachten Sie, dass Absturzinformationen sowohl den Code-Ausführungsstack als auch die Modul-Ladeadresse enthalten müssen. Aufgrund von ASLR (address space layout randomization) kann die Ladeadresse eines dynamischen Bibliotheksmoduls bei jedem Lauf unterschiedlich sein, wodurch sich auch Codeadressen dynamisch ändern. Nur wenn der relative Wert zwischen der Codeadresse im Stack und der Ladeadresse des dynamischen Bibliotheksmoduls bekannt ist, lässt sich bestimmen, wo das Programm abgestürzt ist.

Wenn der Ausführungsstack Inhalte zu easyar oder libEasyAR.dylib enthält, kann der Absturz mit EasyAR zusammenhängen. Wenn nicht, ist der Absturz mit hoher Wahrscheinlichkeit nicht mit EasyAR verbunden.

Weitere absturzbezogene Informationen

  • Versionsnummern von EasyAR Sense und EasyAR Sense Unity Plugin

    Zum Beispiel 4.7.0.11800-cf8e24e30

  • Community edition/Enterprise edition

  • Plattform und CPU-Architektur

    • iOS

      arm64

    • macOS

      x86_64/arm64

    • visionOS

      arm64