0

我有一个用 SpriteKit 制作的小应用程序,我一直收到 EXC_RESOURCE 错误,我真的不知道。我想查看 crash log ,但 Xcode 表示不正确。

我需要查看 Thread 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
4

1 回答 1

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,您可以搜索正确的。您需要从上面调整 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.

希望有帮助!

于 2015-02-27T19:30:49.230 回答