2011-03-24 77 views
3

因此,我有一个应用程序在应用程序商店中生效,我已修改该应用程序以发送回崩溃报告。这帮助我摆脱了大部分的错误,但我很难识别这个错误。下面是一个典型的崩溃报告(我正在使用PLCrashReporter)。了解没有应用程序调用的iOS线程转储

正如你可以看到崩溃的线程(线程6)没有调用我的代码。
显然,我试图理解是什么导致这个问题,所以我可以修复它,但没有调用我的应用程序的代码,我只能猜测。

我还应该提到该应用程序每天使用数十万次,但我仅获得少数这些报告(过去24小时内有8次),所以这个问题不容易重现。我一直无法重现它。

我应该如何解决这一问题?谢谢。

碰撞报告如下:


的applicationName:MyApp的
bundleidentifier:com.mycompany.MyApp
systemversion:4.2.1
平台:iPad1,1

过程:MyApp的[ 909]
路径:/var/mobile/Applications/A50A5AA1-4F04-405B-A295-89E13DA0760E/MyApp.app/MyApp
标识符:com.mycom pany.MyApp
编码类型:ARM(母语)
父进程:的launchd [1]

日期/时间:2011-03-24 11时50分49秒0000
OS版本:iPhone OS 4.2.1
报告版本:104

异常类型:SIGBUS
异常代码:BUS_ADRALN在0x10的
崩溃螺纹:6

线程0:
0 libSystem.B.dylib 0x30d04268 0x30d03000 4712
1的CoreFoundation 0x3580264f 0x357da000 165455
2的CoreFoundation 0x35801ed9 0x357da000 163545
3的CoreFoundation 0x35801c87 0x357da000 162951
4的CoreFoundation 0x35801b8f 0x357da000 162703
5 GraphicsServices 0x320c84ab 0x320c4000 17579
6 GraphicsServices 0x320c8557 0x320c4000 17751
7的UIKit 0x341dc329 0x341a5000 226089
8的UIKit 0x341d9e93 0x341a5000 216723
9 MyApp的0x00002371 0x1000的4977

线程1:
0 libSystem.B.dylib 0x30d30974 0x30d03000 186740
1 libSystem.B.dylib 0x30dda17c 0x30d03000 881020
2 libSystem.B.dylib 0x30dd9ba0 0x30d03000 879520
3 libSystem.B。dylib 0x30d7e251 0x30d03000 504401

线程2:
0 libSystem.B.dylib 0x30d04268 0x30d03000 4712
1的CoreFoundation 0x3580264f 0x357da000 165455
2的CoreFoundation 0x35801ed9 0x357da000 163545
3的CoreFoundation 0x35801c87 0x357da000 162951
4的CoreFoundation 0x35801b8f 0x357da000 162703
5的WebCore 0x34bf612b 0x34b3f000 749867
6 libSystem.B.dylib 0x30d7d88d 0x30d03000 501901

线程3:
0 libSystem.B.dylib 0x30d04268 0x30d03000 4712
1的CoreFoundation 0x3580264f 0x357da000 165455
2的CoreFoundation 0x35801ed9 0x357da000 163545
3的CoreFoundation 0x35801c87 0x357da000 162951
4的CoreFoundation 0x35801b8f 0x357da000 162703
5基金会0x3118e5fd 0x31161000 185853
6基金会0x3116c199 0x31161000 45465
7基金会0x31165249 0x31161000 16969
8 libSystem.B.dylib 0x30d7d88d 0x30d03000 501901

线程4:
0 libSystem.B.dylib 0x30d2868c 0x30d03000 153228
1 libSystem.B.dylib 0x30d7d88d 0x30d03000 501901

螺纹5:
0 libSystem.B.dylib 0x30d7e9e0 0x30d03000 506336

线程6坠毁:
0 libobjc.A。dylib 0x34a80464 0x34a7d000 13412
1的CoreFoundation 0x3580969f 0x357da000 194207
2的CoreFoundation 0x357e60fc 0x357da000 49404
3的CoreFoundation 0x35809623 0x357da000 194083
4的UIKit 0x341bf8d3 0x341a5000 108755
5的UIKit 0x341bf635 0x341a5000 108085
6的UIKit 0x341bf583 0x341a5000 107907
7的UIKit 0x341bf583 0x341a5000 107907
8的UIKit 0x341bf433 0x341a5000 107571
9的UIKit 0x341aa82f 0x341a5000 22575
10 UIKit的0x341c172b 0x341a5000 116523
11的UIKit 0x3420c7cd 0x341a5000 423885
12的UIKit 0x3420c6cb 0x341a5000 423627
13的UIKit 0x3420ed03 0x341a5000 433411
14的UIKit 0x3420e7f3 0x341a5000 432115
15的UIKit 0x3420cd2d 0x341a5000 425261
16的UIKit 0x3420bedd 0x341a5000 421597
17 UIKit的0x341b80cf 0x341a5000 78031
18的CoreFoundation 0x35818bbf 0x357da000 256959
19 QuartzCore 0x31075685 0x31066000 63109
20 QuartzCore 0x3107543d 0x31066000 62525
21 QuartzCore 0x3106f56d 0x31066000 38253
22 QuartzCore 0x3106f383 0x31066000 37763
23 QuartzCore 0x310c332d 0x31066000 381741
24 libSystem.B.dylib 0x30d2c26f 0x30d03000 168559
25 libSystem.B.dylib 0x30d2bf2f 0x30d03000 167727
26 libSystem.B.dylib 0x30d2be91 0x30d03000 167569
27基金会0x3116c1bd 0x31161000 45501
28基金会0x31165261 0x31161000 16993
29 libSystem.B.dylib 0x30d7d88d 0x30d03000 5 01901

螺纹6坠毁与ARM(母语)线程状态:
R0:0x0012aa00 R1:0x344b9f09 R2:0x001f4790 R3:0x34247ead
R4:0x00000008 R5:00000001 R6:0x001df3a0 R7:0x2ff646bc
R8:0x344b9f09 R9 :0x00000008 R10:0x0012aa00 R11:0x2ff64710
R12:0x3e82ac58 SP:0x2ff6461c LR:0x34247ecb PC:0x34a80464

+0

我们在这里有一个非常类似的崩溃。出于好奇,你在使用什么第三方库(如果有的话)?你在使用ASIHTTPRequest吗? – Zeppomedio 2011-03-25 17:28:54

+0

不,我没有使用ASIHTTPRequest。除了PLCrashReporter,我还使用Google的移动应用程序广告库(AFMA) – jeka 2011-03-28 17:41:38

+0

我遇到了同样的问题,但我可以重现它。我有一个自定义电影播放器​​,实现了广告叠加。当显示这些叠加层中的一个时,定时器被安排在指定的持续时间后(淡出)分派代码块以隐藏叠加层。如果电影播放器​​在该定时器触发之前关闭并随后解除分配,则该程序在触发时会崩溃。所以这可能是因为你对一些不存在的对象进行了一些延迟的UIKit调用。 – darvids0n 2011-09-08 06:22:16

回答

0

如果您使用的Xcode> 3.2.1但< 4.0,则可以拖动该崩溃报告文件到管理窗口,到设备日志部分,它会自动为您进行符号化,从而为您提供相关信息您在那里看到的堆栈痕迹非常漂亮。

否则,请按照this question的说明手动对其进行符号化。

+1

我收到的崩溃报告与标准iOS报告不尽相同,即使它们看起来很相似。所以组织者和symboliccrash都不能理解它。但是,只要崩溃的线程调用了我的代码,这是没问题的,因为我使用“atos”来确定我的代码导致错误的调用。 在这种特殊情况下,崩溃的线程没有调用我的代码,所以我只能猜测是什么导致了崩溃,我无法象征基金会符号。 – jeka 2011-03-24 14:04:15

0

这不是一个灌篮高手,但是线程6可能会释放一些免费的桥接对象(如NSString/CFStringRef)。这个对象可能已经被你的代码过度发布了,而且超出租约要么是活泼的,要么就是通常是良性的。

如果不这样做,你能否改变你的崩溃报告系统来收集设备类型数据和(非识别)设备特定数据(如果你发现你没有一个UUID存储在prefs文件中)?然后你就可以知道它是来自单个用户还是非常小的用户池(可能是他们特定设备的硬件问题),或者是很多用户(而不是硬件问题),或者是所有相同的操作系统版本(也许是一个操作系统错误,或者至少是行为上的差异,你正在测试的范围被缩小了,或者你可以放弃该操作系统版本或该操作系统上的特定功能)。