Erfassung von absturzorten auf iOS/macOS/visionOS
Anweisungen zur Analyse von Abstürzen auf nativen (iOS/macOS), Unity (iOS/macOS/visionOS) und Unity-Editor-Plattformen (macOS) finden Sie unten.
Erfassung von absturzorten während der entwicklung
Die Informationen, die für das Debuggen in XCode benötigt werden, sind im folgenden Bild dargestellt.

Durch Eingabe von bt in lldb erhalten Sie die Absturzursache und die Aufruffolge (Call Stack), 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 die Aufruffolge Inhalte im Zusammenhang mit easyar oder libEasyAR.dylib enthält, kann dies auf einen Absturz im Zusammenhang mit EasyAR hindeuten; wenn nicht, ist die Wahrscheinlichkeit hoch, dass der Absturz nicht mit EasyAR zusammenhängt.
Durch Eingabe von image list easyar oder image list libEasyAR.dylib in lldb erhalten Sie die Ladeadresse der dynamischen Bibliothek, 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
Erfassung von absturzorten während der entwicklung (Unity)
Bei der Entwicklung von Anwendungen mit Unity können Sie auch die Unity-Protokolle zur Absturzanalyse verwenden.
Unity-Protokolle werden in Editor-Protokolle und Player-Protokolle unterteilt und können wie folgt abgerufen werden.
| Unity-Umgebung | Betriebssystem | Protokolladresse |
|---|---|---|
| Editor | macOS | ~/Library/Logs/Unity/Editor.log |
| Player | iOS | Verwenden Sie die lldb-Konsole von XCode |
| Player | macOS | ~/Library/Logs/Company Name/Product Name/Player.log |
Editor-Protokolle können auch über den Befehl Open Editor Log im Menü oben rechts im Console-Fenster geöffnet werden.
Verwaltete Ausnahmen (C#) können im Console-Fenster des Unity-Editors eingesehen werden (Unity-Hauptmenü Window -> General -> Console).
Erfassung von absturzorten nach der veröffentlichung
Nach der Veröffentlichung können ebenfalls Abstürze auftreten. In diesem Fall können Sie über Privacy - Analytics & Improvements - Analytic Data auf dem Gerät oder über TestFlight und den App Store Absturzprotokolle sammeln.
Hier 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
Darin enthaltene Aufruffolgen mit easyar 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 ist die Modulladeadresse von easyar, und 7366592 ist der Offset.
Im Abschnitt Binary Images ist ebenfalls ersichtlich, dass 0x1028b4000 die Modulladeadresse von easyar ist.
Beachten Sie, dass die Absturzinformationen unbedingt sowohl die Aufruffolge als auch die Modulladeadressen enthalten müssen. Aufgrund von ASLR (Address Space Layout Randomization) kann sich die Ladeadresse der dynamischen Bibliothek bei jedem Start ändern, was zu dynamischen Änderungen der Codeadressen führt. Nur wenn der relative Wert zwischen der Codeadresse in der Aufruffolge und der Modulladeadresse der dynamischen Bibliothek bekannt ist, kann ermittelt werden, an welcher Stelle das Programm abgestürzt ist.
Wenn die Aufruffolge Inhalte im Zusammenhang mit easyar oder libEasyAR.dylib enthält, kann dies auf einen Absturz im Zusammenhang mit EasyAR hindeuten; wenn nicht, ist die Wahrscheinlichkeit hoch, dass der Absturz nicht mit EasyAR zusammenhängt.
Weitere absturzrelevante informationen
Versionsnummer von EasyAR Sense und EasyAR Sense Unity Plugin
Z.B. 4.7.0.11800-cf8e24e30
Community Edition/Enterprise Edition
Plattform und CPU-Architektur
iOS
arm64
macOS
x86_64/arm64
visionOS
arm64