Xcode符号错误

时间:2015-02-27 17:21:30

标签: ios xcode sprite-kit symbolicate

我有一个用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

1 个答案:

答案 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的符号化崩溃日志。

希望有所帮助!