我最近在一个月前发布了一个应用程序,它由我自己,我的合作伙伴和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中,因为它在启动屏幕后立即崩溃。
答案 0 :(得分:4)
我也得到了这个错误并修复了它。这个人最有可能运行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
答案 1 :(得分:1)
这是一个非常奇怪的堆栈跟踪。它在dyld(动态库加载器)中崩溃了。这表明它在加载动态库或框架时遇到问题,这意味着它正在加载系统代码(因为你不能在标准的iphone上安装第三方动态库)。请注意,在二进制映像部分,您的代码似乎甚至没有加载(或者转储的其余部分是否被截断)?您是否手动加载动态库(dlopen()
等)?即使你是,如果你的程序实际加载了,你也希望main()
成为堆栈....
当你说他们尝试重新安装时,我认为你的意思是你的应用程序?这是否意味着他们删除了您的应用,然后重新安装它,或其他什么?想到的最可能的原因是捆绑包的损坏。但你认为删除和重新安装会解决这个问题。更积极的是删除,重启,然后重新安装。
我的下一个问题是这是否是越狱的iPhone。如果他们还没有,我会要求用户重启iPhone。我甚至会诱惑要求他们恢复操作系统,但要求客户做这件事总是一件尴尬的事情。
答案 2 :(得分:0)
崩溃日志有一般的经验法则:如果回溯无效,请查看控制台日志输出。
在这种情况下,可能发生的事情是您正在使用旧操作系统版本中不存在的内容。当dyld(动态加载器)尝试在加载时解析符号时,它无法找到其中的一些符号,并且符号或库未被弱链接。控制台日志应该说明哪个符号/库无法加载。
在常见情况下,您可以将框架从“必需”更改为“弱”。
答案 3 :(得分:-1)
从Apple's tech note on reading crash files尝试这些步骤。它解释了如何将十六进制代码转换为应用程序中的符号(类名,方法名,变量名等)。
Signal.h包含一些错误列表,如SIGTRAP,定义如下:
#define SIGTRAP 5 /* trace trap (not reset when caught) */