大家在使用iPhone程序的时候,或多或少会遇到程序自动退出,或者叫程序崩溃.
个别程序常常发生的话会比较讨厌.
那么究竟这些程序是什么原因自动退出呢.iPhone用户是可以自己进行分析的.
首先,iPhone程序的每次异常退出,机器都是有记录的,每次和iTune同步的时候,这些异常的报告
都发到了你的电脑上.在下面目录
Mac OS X: ~/Library/Logs/CrashReporter/MobileDevice/
Windows XP: C:\Documents and Settings\\Application Data\Apple Computer\Logs\CrashReporter\MobileDevice\
Windows Vista: C:\Users\\AppData\Roaming\Apple Computer\Logs\CrashReporter\MobileDevice\
文件名例如Ocarina_2008-11-14-221805_Tomato.crash
带了日期,程序名字还有你的机器名字.
用文本编辑程序打开文件,TextEdit就可以了,可以看到这些报告有4种情形.
第1种程序里面的错误,通常都有出错的堆栈
[Copy to clipboard]
CODE:
Incident Identifier: C5EA8367-22F7-44BE-A84C-50592C6864CA
CrashReporter Key: 5131b55761bdb31569e8b3582ff9228e7ccb87ae
Process: PegJump [2430]
Path: /var/mobile/Applications/2132EDD7-D55A-43F5-9DC8-F34E1AC04DE7/PegJump.app/PegJump
Identifier: PegJump
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2008-08-26 19:43:40.680 -0400
OS Version: iPhone OS 2.0.2 (5C1)
Report Version: 103
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000024
Crashed Thread: 1
Thread 0:
0 libSystem.B.dylib 0x31446f68 0x313d5000 + 466792
1 libSystem.B.dylib 0x31444034 0x313d5000 + 454708
2 CoreFoundation 0x3025b9ac 0x30229000 + 207276
3 CoreFoundation 0x3025b584 0x30229000 + 206212
4 GraphicsServices 0x316998e4 0x31696000 + 14564
5 UIKit 0x30a5e308 0x30a54000 + 41736
6 UIKit 0x30a671dc 0x30a54000 + 78300
7 PegJump 0x00002090 0x1000 + 4240
8 PegJump 0x0000202c 0x1000 + 4140
第2种是,内存过低,系统对内存发出警告,但程序没有采取足够的措施减少内存使用而给系统关掉.
这个例子很容易在2.2以前的Safari里面出现. 内存不足的crash report和其它的不同,里面提供的是当时在机器里面运行的所有程序
的名字和它占用的内存数目,因为内存不足很可能是一个或者多个程序引起的.
下面的例子,空余内存不到3M,Safari就给强行关掉了
[Copy to clipboard]
CODE:
Incident Identifier: 3246EBCC-EF2D-4D39-ADB8-E0E9E4C402C4
CrashReporter Key: 5131b55761bdb31569e8b3582ff9228e7ccb87ae
OS Version: iPhone OS 2.1 (5F136)
Date: 2008-11-06 12:05:57 -0500
3350528 bytes free
38572032 bytes wired
40960 bytes purgeable
Memory status: 10
About to jettison: MobileSafari
Processes
PID RPRVT RSHRD RSIZE Command
1 244K 244K 368K launchd
13 72.0K 144K 92.0K update
14 392K 184K 460K syslogd
15 688K 288K 1000K lockdownd
17 280K 288K 540K mDNSResponder
19 652K 244K 1.31M iapd
20 240K 148K 320K fairplayd
22 688K 264K 1.05M configd
23 9.57M 21.0M 12.9M SpringBoard
26 968K 428K 1.48M CommCenter
28 1.11M 252K 1.50M aosnotifyd
29 228K 168K 280K notifyd
40 9.22M 7.90M 11.3M MobilePhone
70 300K 156K 424K SCHelper
1648 812K 236K 1.39M dataaccessd
2112 1.81M 352K 2.25M mediaserverd
3572 560K 252K 856K BTServer
4638 15.2M 19.3M 28.9M MobileSafari
4642 296K 216K 1.12M ReportCrash
**End**
第3种情况就是程序启动或者退出时间过长,停止响应给系统关闭.
这种出错的特点是出错的一行有一个 0x8badf00d的地址
例如下面的例子
[Copy to clipboard]
CODE:
Incident Identifier: FC4DEF80-4520-432B-BE7C-25FFDCDABFEB
CrashReporter Key: 5131b55761bdb31569e8b3582ff9228e7ccb87ae
Process: Stanza [189]
Path: /var/mobile/Applications/8F841D4A-88B5-43D7-B9FA-3EA235082018/Stanza.app/Stanza
Identifier: Stanza
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2008-10-17 21:11:49.715 -0400
OS Version: iPhone OS 2.1 (5F136)
Report Version: 103
Exception Type: 00000020
Exception Codes: 0x8badf00d
Highlighted Thread: 0
Application Specific Information:
Failed to deactivate
Thread 0:
0 libSystem.B.dylib 0x31460110 0x313e3000 + 512272
1 libSystem.B.dylib 0x3143a512 0x313e3000 + 357650
2 libSystem.B.dylib 0x3143a54e 0x313e3000 + 357710
3 libSystem.B.dylib 0x31446822 0x313e3000 + 407586
4 libSystem.B.dylib 0x3143cfcc 0x313e3000 + 368588
5 libCGFreetype.A.dylib 0x3335d65c 0x33358000 + 22108
6 libCGFreetype.A.dylib 0x33362dd4 0x33358000 + 44500
.....
最后一种情况是用户强行退出,就是按着Home键6秒的情形,这种情况的出错字段是 0xdeadfa11.
知道了以上这些信息,用户可以更深层次的了解程序崩溃的原因,也更容易统计程序的稳定性.
比如说,下次讨论safari稳定情狂的时候,你可以给出数据,说2.2以前内存不够有多少次,2.2又有多少次,2.2.1有多少次等等,这样显得有说服力.
同时,大家可以email这些报告给开发者,让他们能找到这些bug,如果是apple的程序,可以到bugreport.apple.com提交,前提是注册一个adc的免费会员.
更多的信息,大家可以看这个文档,需要ADC帐户.
http://developer.apple.com/iphone/library/technotes/tn2008/tn2151.html
没有评论:
发表评论