【问题标题】:Objective-C iPhone App EXC_BREAKPOINT (SIGTRAP)Objective-C iPhone 应用程序 EXC_BREAKPOINT (SIGTRAP)
【发布时间】:2010-03-03 04:10:39
【问题描述】:

我最近在大约一个月前发布了一个应用程序,它经过了我自己、我的合作伙伴和 beta 测试人员的全面测试。最近,一位用户联系我说该应用程序甚至无法打开(启动屏幕后崩溃),他们拥有正确的操作系统并尝试重新安装。

我要求提供崩溃日志,他们将其发送给我...

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread:  0

Thread 0 Crashed:
0   dyld                           0x2fe01060 0x2fe00000 + 4192
1   dyld                           0x2fe088d4 0x2fe00000 + 35028
2   dyld                           0x2fe0196c 0x2fe00000 + 6508
3   dyld                           0x2fe01048 0x2fe00000 + 4168

Thread 0 crashed with ARM Thread State:
    r0: 0x2fe23ca0    r1: 0x00000000      r2: 0x2fe23ca0      r3: 0x00000000
    r4: 0x2ffff4e0    r5: 0x2ffff4bc      r6: 0x2fe005c0      r7: 0x2ffffb00
    r8: 0x00000004    r9: 0x2fe57cf0     r10: 0x2fe236c8     r11: 0x00000009
    ip: 0x0000018d    sp: 0x2ffff5b8      lr: 0x2fe088dc      pc: 0x2fe01060
  cpsr: 0x00000010

Binary Images:
0x2fe00000 - 0x2fe22fff  dyld ??? (???) <f6a50d5f57a676b54276d0ecef46d5f0> /usr/lib/dyld

我似乎在我的应用程序中找不到问题,什么类型的问题会导致 EXC_BREAKPOINT (SIGTRAP)?我假设错误在我的 AppDelegate 中,因为它在启动屏幕后立即崩溃。

【问题讨论】:

  • 我从一个用户那里得到了一份崩溃报告,看起来和这个完全一样(直到十六进制地址)。你找到根本原因了吗?
  • 不,我没有,我告诉他们完全删除它并重新下载。我还没有收到他们的回复,所以要么他们放弃了,要么它奏效了。这是迄今为止我收到的唯一投诉。

标签: iphone objective-c crash logging


【解决方案1】:

我也遇到了这个错误并修复了它。这个人很可能正在运行 OS3,而您正在使用 OS4 中的代码块,您需要在库上设置一个弱链接,以便它可以正确加载。 在 LLVM 的构建设置中 -weak_library /usr/lib/libSystem.B.dylib

这里也讨论过 iOS 4 app crashes at startup on iOS 3.1.3: Symbol not found: __NSConcreteStackBlock

【讨论】:

    【解决方案2】:

    这是一个非常奇怪的堆栈跟踪。它在 dyld(动态库加载器)中崩溃。这表明它在加载动态库或框架时遇到问题,这意味着它正在加载系统代码(因为您不能在标准 iphone 上拥有 3rdparty 动态库)。请注意,在二进制图像部分,您的代码似乎还没有加载(或者转储的其余部分被截断了)?您是否手动加载动态库(dlopen() 等)?即使你是,如果你的程序实际上已经加载,你会期望main() 在堆栈上......

    当您说他们已尝试重新安装时,我假设您是指您的应用?这是否意味着他们删除了您的应用程序然后重新安装了它,或者其他什么?想到的最可能的原因是捆绑包损坏。但是你会认为删除和重新安装会解决这个问题。更激进的方法是删除、重新启动,然后重新安装。

    我的下一个问题是这是否是越狱的 iPhone。如果他们还没有,我会要求用户重新启动 iPhone。我什至很想要求他们恢复操作系统,但要求客户这样做总是一件尴尬的事情。

    【讨论】:

    • 我告诉他们卸载应用程序然后重新安装,不确定他们是否重新启动,但我会告诉他们试一试。我没有对库进行任何手动加载。如果情况变得更糟,我会看看他们是否愿意重新安装操作系统。我不认为它是越狱的......我不得不帮助他们只是为了找到他们的操作系统版本和崩溃日志,他们甚至不确定他们拥有什么尺寸的 iPod touch。所以我不认为他们是越狱的,但我可能错了。
    【解决方案3】:

    崩溃日志有一个通用的经验法则:如果回溯没有用,请查看控制台日志输出。

    在这种情况下,可能发生的情况是您正在使用旧操作系统版本中不存在的东西。当 dyld(动态加载器)尝试在加载时解析符号时,它无法找到其中的一些符号,并且符号或库没有被弱链接。控制台日志应该说明哪个符号/库加载失败。

    在一般情况下,您只需将框架从“必需”更改为“弱”即可。

    【讨论】:

      【解决方案4】:

      Apple's tech note on reading crash files 尝试这些步骤。它解释了如何从您的应用程序中将十六进制代码转换为符号(类名、方法名、变量名等)。

      Signal.h 包含一个错误列表,例如 SIGTRAP,其定义为:

      #define SIGTRAP 5   /* trace trap (not reset when caught) */
      

      【讨论】:

        猜你喜欢
        • 2012-04-27
        • 2011-04-24
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        相关资源
        最近更新 更多