我有一个用SpriteKit制作的小应用程序,我一直收到EXC_RESOURCE错误,我真的不知道。我想看崩溃日志,但Xcode没有象征正确。
我需要看到线程0,但它是唯一没有符号的人。
Exception Type: EXC_RESOURCE
Exception Subtype: WAKEUPS
Exception Message: (Limit 150/sec) Observed 379/sec over 300 secs
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Attributed:
0 libobjc.A.dylib 0x33ef1a54 0x33ecf000 + 141908
1 libobjc.A.dylib 0x33ed4a24 0x33ecf000 + 23076
2 CoreFoundation 0x2661beec 0x26615000 + 28396
3 CoreFoundation 0x266b655e 0x26615000 + 660830
4 CoreFoundation 0x266b67b4 0x26615000 + 661428
5 UIKit 0x29e6adec 0x29bcd000 + 2743788
6 UIKit 0x29c106a2 0x29bcd000 + 276130
7 UIKit 0x29e4ce8a 0x29bcd000 + 2621066
8 UIKit 0x29bdb3d4 0x29bcd000 + 58324
9 CoreFoundation 0x266e1d54 0x26615000 + 838996
10 CoreFoundation 0x266e1162 0x26615000 + 835938
11 CoreFoundation 0x266df7c8 0x26615000 + 829384
12 CoreFoundation 0x2662d3bc 0x26615000 + 99260
13 CoreFoundation 0x2662d1ce 0x26615000 + 98766
14 GraphicsServices 0x2da2b0a4 0x2da22000 + 37028
15 UIKit 0x29c3b7ac 0x29bcd000 + 452524
16 Annoying Bird 0x00071f5c 0x54000 + 122716
17 libdyld.dylib 0x34455aac 0x34454000 + 6828
Thread 1 name: Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0 libsystem_kernel.dylib 0x345082a0 kevent64 + 24
1 libdispatch.dylib 0x344419fc _dispatch_mgr_invoke + 276
2 libdispatch.dylib 0x3443720e _dispatch_mgr_thread + 34
Thread 2 name: AURemoteIO::IOThread
Thread 2:
0 libsystem_kernel.dylib 0x345084f0 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x345082e4 mach_msg + 36
2 AudioToolbox 0x25e9599a AURemoteIO::IOThread::Run() + 102
3 AudioToolbox 0x25e99094 AURemoteIO::IOThread::Entry(void*) + 4
4 AudioToolbox 0x25dcd9e2 CAPThread::Entry(CAPThread*) + 206
5 libsystem_pthread.dylib 0x34598e90 _pthread_body + 136
6 libsystem_pthread.dylib 0x34598e02 _pthread_start + 114
7 libsystem_pthread.dylib 0x34596b8c thread_start + 4
Thread 3:
0 libsystem_kernel.dylib 0x3451c9cc __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x34596ea8 _pthread_wqthread + 788
2 libsystem_pthread.dylib 0x34596b80 start_wqthread + 4
Thread 4:
0 libsystem_kernel.dylib 0x3451c9cc __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x34596ea8 _pthread_wqthread + 788
2 libsystem_pthread.dylib 0x34596b80 start_wqthread + 4
Thread 0 crashed with ARM Thread State (32-bit):
r0: 0x00000000 r1: 0x3481da04 r2: 0x16664d50 r3: 0x01001380
r4: 0x00000000 r5: 0x3481da04 r6: 0x16664d50 r7: 0x00183450
r8: 0x00000030 r9: 0xffffffff r10: 0x00000013 r11: 0x347fa3c0
ip: 0x36b8a198 sp: 0x00183444 lr: 0x33ed4a29 pc: 0x33ef1a54
cpsr: 0x20000010
答案 0 :(得分:1)
在答案中扩展我之前的评论,因为它不再符合评论。
在崩溃报告中,查看二进制图像下的第一行
EG>
Binary Images:
0xb3000 - 0x242fff AppName armv7 <6daf5fd2c9e23af786cd580ef39b5b82> /private/var/mobile/Containers/Bundle/Application/E83D554F-BD3A-47CF-8753-AAACB0BDDF33/AppName.app/AppName
尖括号<>
之间的哈希是生成崩溃日志的构建的构建UUID。我们稍后会调用CrashLogUUID。
接下来,在终端中,切换到已存档的应用程序目录并执行:
dwarfdump --uuid dSYMs/AppName.app.dSYM
您将获得许多UUID,一个用于应用中的每个切片/架构。
确认您在崩溃日志中看到的CrashLogUUID列在应用程序的UUID列表中。如果您没有看到匹配项,则说明存档/ dSYM错误。
如果它是错误的dSYM,您可以搜索正确的dSYM。您需要从上面调整CrashLogUUID的格式,将其全部大写,并添加连字符以符合标准UUID格式:8chars-4chars-4chars-4chars-12chars。让我们称之为CrashLogUUIDFormatted。
由于Mavericks中存在错误,您需要将所有已归档项目从〜/ Library文件夹复制到Spotlight索引的某个位置,例如桌面。在Mavericks中,即使您专门添加了Spotlight,它也不会在〜/ Library下编入索引(rdar:// 17169292已在Yosemite中修复)。
现在在终端中输入:
mdfind "com_apple_xcode_dsym_uuids == CrashLogUUIDFormatted"
这将列出与崩溃日志相关的应用归档和/或dSYM的正确位置。如果它变回空白,Spotlight无法找到正确的版本,而您的系统中很多都没有。
一旦你有了正确的dSYM,你可以让Xcode尝试再次自动进行符号化(如果它之前没有用mdfind
找到它但现在可以做到,这将有效)。或者您可以使用以下命令手动对其进行符号化:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash -v -o output.log yourCrashLog.crash AppName.dSYM
这会占用您的崩溃日志和您的dSYM,并创建一个名为output.log
的符号化崩溃日志。
希望有所帮助!