【问题标题】:Why are my crash reports not symbolicated?为什么我的崩溃报告没有符号化?
【发布时间】:2012-05-22 17:58:38
【问题描述】:

我使用的是 Xcode 4.3.1。崩溃发生在我的设备上,所以我连接它并打开 Organizer,转到我的设备日志,找到崩溃报告,它的内容如下:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x3514488f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x3656b259 objc_exception_throw + 33
2   CoreFoundation                  0x35144789 +[NSException raise:format:] + 1
3   CoreFoundation                  0x351447ab +[NSException raise:format:] + 35
4   CoreFoundation                  0x350b168b -[__NSCFDictionary setObject:forKey:] + 235
5   myapp                           0x0015b4a7 0xe8000 + 472231
6   myapp                           0x0018add1 0xe8000 + 667089
7   myapp                           0x0013cd5b 0xe8000 + 347483
8   Foundation                      0x30ffb60d __NSFireTimer + 145
9   CoreFoundation                  0x35118a33 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15
10  CoreFoundation                  0x35118699 __CFRunLoopDoTimer + 365
11  CoreFoundation                  0x3511726f __CFRunLoopRun + 1207
12  CoreFoundation                  0x3509a4a5 CFRunLoopRunSpecific + 301
13  CoreFoundation                  0x3509a36d CFRunLoopRunInMode + 105
14  GraphicsServices                0x36396439 GSEventRunModal + 137
15  UIKit                           0x32190e7d UIApplicationMain + 1081
16  myapp                           0x000f6aff 0xe8000 + 60159
17  myapp                           0x000e9370 0xe8000 + 4976


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x34f3832c __pthread_kill + 8
1   libsystem_c.dylib               0x36e34208 pthread_kill + 48
2   libsystem_c.dylib               0x36e2d298 abort + 88
3   libc++abi.dylib                 0x30af9f64 abort_message + 40
4   libc++abi.dylib                 0x30af7346 _ZL17default_terminatev + 18
5   libobjc.A.dylib                 0x3656b350 _objc_terminate + 140
6   libc++abi.dylib                 0x30af73be _ZL19safe_handler_callerPFvvE + 70
7   libc++abi.dylib                 0x30af744a std::terminate() + 14
8   libc++abi.dylib                 0x30af881e __cxa_rethrow + 82
9   libobjc.A.dylib                 0x3656b2a2 objc_exception_rethrow + 6
10  CoreFoundation                  0x3509a506 CFRunLoopRunSpecific + 398
11  CoreFoundation                  0x3509a366 CFRunLoopRunInMode + 98
12  GraphicsServices                0x36396432 GSEventRunModal + 130
13  UIKit                           0x32190e76 UIApplicationMain + 1074
14  myapp                           0x000f6af8 0xe8000 + 60152
15  myapp                           0x000e9368 0xe8000 + 4968

我认为 Xcode 会自动为我处理符号化崩溃报告?为什么我没有得到任何行号或方法?为什么我的异常代码是 0x00000000?

我试过the method found here,但是当我输入任何内存地址时,输出就是同一个内存地址。这是我可以从崩溃日志中获得的最多信息,还是这里有问题?

【问题讨论】:

  • 您是否尝试过通过atos 运行崩溃报告?
  • 是的,我尝试了上面链接中的方法,也就是atos方法,但是无论我在atos -arch armv7 -o 'myapp.app'/'myapp' MEMORY ADDRESS之后输入什么内存地址,它都会注销我输入的内存地址,所以这里的输出将是 MEMORY ADDRESS
  • 另一件事 - 今天早上发生的最后一次崩溃,我更改了几行代码(接口内容)并构建了它。我通常不存档或任何东西,只是构建。所以我的崩溃日志来自以前的版本(虽然没有太大变化)。如果我不使用存档选项,这可能是原因吗?
  • 是的,这就是原因。符号化仅适用于特定构建。你甚至无法重建完全相同的源代码。
  • 我也有同样的问题。 @maq,你找到解决方法了吗?

标签: iphone objective-c ios xcode


【解决方案1】:

要表示崩溃报告,您需要该确切构建的 dSYM 包。我猜这是一个未存档的调试版本,因此下次构建应用程序时 dSYM 也会被覆盖。这就是组织者无法完全象征崩溃报告的原因。

您提到的方法仅在二进制文件没有去除符号时才有效,即使那样它也不会报告行号!因此,与其对应用程序二进制文件使用它,不如将它与 dSYM 一起使用。也许你很幸运,新的 dSYM 仍然有一些有用的信息。

atos -arch armv7 -o 'appname.app.dSYM' 0x0015b4a7

崩溃本身可能会将 NSDictionary 值设置为例如一个零键。

【讨论】:

  • 幸运的是,对于我来说,使用 4.3.2 Xcode 版本的日志用行号表示,并且没有当前构建归档,同时将 Strip Debug Symbols During Copy 设置为 NO 用于调试配置。
  • 那么 dSYM 在您的 Mac 上仍然可用。符号化脚本使用聚光灯搜索它。作为可执行文件一部分的符号不提供行号。从不。
  • 我无法让它工作。我的应用程序名称中有一个空格和一个撇号 - 我不确定为什么 Apple 允许它以这种方式提交(或者为什么我没有更好地考虑),但我无法获得任何调试符号自己的代码。 Apple 的(Core Data、UIKit 等)很好。
【解决方案2】:

希望这可能对其有相同问题的其他人有所帮助,对我有用的是在存档目录中运行以下命令(看起来像 /Users/my_user/Library/Developer/Xcode/Archives/2012-09- 24,所以先cd进去)

mdimport .

然后尝试运行 symbolicatecrash 脚本。在 XCode 中,转到您的 Organizer、Device Logs,然后通过右键单击崩溃日志选择“Re-Symbolicate Log”。

【讨论】:

  • 这非常适合我在市场上拥有的应用程序。杰出的!是什么让你找到了这个?
  • 也为我工作!谢谢!
【解决方案3】:

我无法通过将崩溃报告拖入 Organizer->Devices->Library->Device Logs 来让 XCode 4.5.1 进行符号化。

我也无法通过在@Kerni 上面的帖子中指定dSYM 来获得崩溃的符号地址。

我使用过atos,但我只能通过在xcarchive 文件(实际上是一个目录)中指定符号文件的完整路径来使其工作。示例:

cd dir_where_the_xcarchive_is
atos -arch armv7 -o myApp\ 9-18-12\ 5.28\ PM.xcarchive/dSYMs/myApp.app.dSYM/Contents/Resources/DWARF/myApp   0x0001943a

【讨论】:

    【解决方案4】:

    关于您关于异常代码的问题...

    Exception Codes: 0x00000000, 0x00000000
    

    ...this Apple Technical Note 可能会回答您的问题。简而言之,此崩溃报告不是由标准记录的崩溃类型生成的。

    崩溃日志中大约有 16 行,您将看到一行开始 文本后跟一个或多个十六进制值,它们是 处理器特定的代码,可以为您提供有关 崩溃的性质。您可以从这些代码中看出应用程序是否 由于编程错误而崩溃(例如,错误的内存访问, 例外等),或者如果应用程序因某些原因而终止 其他原因,例如:

    异常代码0x8badf00d表示一个应用程序被 由 iOS 终止,因为发生了看门狗超时。应用程序 启动、终止或响应系统事件的时间过长。一 造成这种情况的常见原因是在主服务器上进行同步网络 线。异常代码 0xbad22222 表示 VoIP 应用程序已被 iOS 终止,因为它也恢复了 频繁地。异常代码 0xdead10cc 表示 应用程序已被 iOS 终止,因为它保留了系统 资源(如地址簿数据库),同时在 背景。异常代码 0xdeadfa11 表示 应用程序已被用户强制退出。强制退出发生在 用户首先按住开/关按钮,直到“滑动关机” 出现,然后按住主页按钮。假设是合理的 用户这样做是因为应用程序已成为 无响应,但不能保证 - 强制退出将适用于任何 应用。

    【讨论】:

      【解决方案5】:

      请改用Crashlytics

      它提供有关实时崩溃报告的即时(通过电子邮件获得通知)以及发生崩溃的确切行号。

      【讨论】:

        猜你喜欢
        • 2018-02-12
        • 2011-09-09
        • 2011-06-25
        • 1970-01-01
        • 2018-01-05
        • 2019-05-31
        • 2010-11-30
        • 2017-07-07
        相关资源
        最近更新 更多