有人请帮忙了解一下车祸?

时间:2012-02-26 04:40:27

标签: ios xcode4 crash

iPhone应用程序在设备上崩溃但在模拟器上没有崩溃。所以我正在尝试学习如何解释崩溃日志。我阅读了很多论坛帖子,说明符号化的崩溃日志显示了一个返回跟踪,它给出了导致崩溃的调用方法和行号,但我没有看到任何有用的内容。也许我不是在看符号化的崩溃日志。这是我看到的开始:

Incident Identifier: 432A8974-1661-409F-B5A6-970148550A46
CrashReporter Key:   db93147c0a70a5f4c60dc92f826e72d5a74477c8
Hardware Model:      iPhone3,3
Process:         Darken [57959]
Path:            /var/mobile/Applications/CB27C10F-CD3B-4148-8321-2C251888B27B/Darken.app/Darken
Identifier:      Darken
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2012-02-25 10:43:47.753 -0500
OS Version:      iPhone OS 4.2.10 (8E600)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x32716464 objc_msgSend + 16
1   UIKit                           0x3245e6fe -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded] + 90
2   CoreFoundation                  0x32071bb8 -[NSObject(NSObject) performSelector:withObject:] + 16
3   UIKit                           0x3245e5b8 -[UIAnimator stopAnimation:] + 276
4   UIKit                           0x323efbf2 -[UIAnimator(Static) _advance:] + 214
5   UIKit                           0x323efb0e LCDHeartbeatCallback + 10
6   GraphicsServices                0x35474362 HeartbeatVBLCallback + 86
7   IOMobileFramebuffer             0x34739bf4 IOMobileFramebufferVsyncNotifyFunc + 68
8   IOKit                           0x348e5e64 IODispatchCalloutFromCFMessage + 192
9   CoreFoundation                  0x32070be0 __CFMachPortPerform + 204
10  CoreFoundation                  0x320686f8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20
11  CoreFoundation                  0x320686bc __CFRunLoopDoSource1 + 160
12  CoreFoundation                  0x3205af76 __CFRunLoopRun + 514
13  CoreFoundation                  0x3205ac80 CFRunLoopRunSpecific + 224
14  CoreFoundation                  0x3205ab88 CFRunLoopRunInMode + 52
15  GraphicsServices                0x354724a4 GSEventRunModal + 108
16  GraphicsServices                0x35472550 GSEventRun + 56
17  UIKit                           0x323c7d1a -[UIApplication _run] + 406
18  UIKit                           0x323c5884 UIApplicationMain + 664
19  Darken                          0x000029d6 0x1000 + 6614
20  Darken                          0x00002998 0x1000 + 6552

...此处列出的0以外的主题

有什么方法可以找出导致崩溃的代码行吗? Darken是应用程序的名称 - 我已经知道了。我认识的唯一方法名称是UIApplicationMain但是当应用程序首次启动时没有发生崩溃 - 我在运行它大约一分钟并在崩溃之前执行了几十个功能。

2 个答案:

答案 0 :(得分:0)

您可能想尝试在项目中将NSZombieEnabled设置为YES,并让它在调试中运行时崩溃。它应该停在导致崩溃的代码行。您的错误看起来像是EXC_BAD_ACCESS,这通常意味着您正在尝试访问一些已释放的内存。

答案 1 :(得分:0)

  1. 您不会从崩溃转储中获取行号(除非您使用-g编译您的应用并在GDB中运行,但我怀疑它,因为您似乎根本不知道这些是什么)

  2. 您正在查看符号化的故障转储:您可以在调用堆栈中找到函数的名称。崩溃发生在最后一个被调用的(最顶层)函数中,即objc_msgSend。这意味着你没有正确平衡你的alloc / retain / copy方法与autorelease / release,并且messenger函数试图访问已经释放/损坏/不存在的内存,因此崩溃(EXC_BAD_ACCESS类似于段错误,实际上你是'当你犯这样的错误时,我会得到其中一个。)

  3. 所以我的建议是,对修改引用计数的方法调用进行三重检查。