如何找到,崩溃发生在哪里 - ios

时间:2014-01-06 14:09:45

标签: ios objective-c crash crash-reports

我在ipad 1中运行我的ios应用程序,在应用程序运行时发生以下崩溃,我不知道崩溃发生在哪里。这主要发生在ios 5.1.1中。这里是崩溃日志,

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xf0000008
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3387ef78 objc_msgSend + 16
1   UIKit                           0x333ffa3a -[UIViewController unloadViewForced:] + 254
2   UIKit                           0x335473a6 -[UIViewController purgeMemoryForReason:] + 58
3   Foundation                      0x3507a4f8 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 12
4   CoreFoundation                  0x35c2c540 ___CFXNotificationPost_block_invoke_0 + 64
5   CoreFoundation                  0x35bb8090 _CFXNotificationPost + 1400
6   Foundation                      0x34fee3e4 -[NSNotificationCenter postNotificationName:object:userInfo:] + 60
7   Foundation                      0x34fefc14 -[NSNotificationCenter postNotificationName:object:] + 24
8   UIKit                           0x335120e6 -[UIApplication _performMemoryWarning] + 74
9   UIKit                           0x335121e0 -[UIApplication _receivedMemoryNotification] + 168
10  libdispatch.dylib               0x33ffb252 _dispatch_source_invoke + 510
11  libdispatch.dylib               0x33ff8b1e _dispatch_queue_invoke$VARIANT$up + 42
12  libdispatch.dylib               0x33ff8e64    _dispatch_main_queue_callback_4CF$VARIANT$up + 152
13  CoreFoundation                  0x35c332a6 __CFRunLoopRun + 1262
14  CoreFoundation                  0x35bb649e CFRunLoopRunSpecific + 294
15  CoreFoundation                  0x35bb6366 CFRunLoopRunInMode + 98
16  GraphicsServices                0x33951432 GSEventRunModal + 130
17  UIKit                           0x3338ecce UIApplicationMain + 1074
18  MY Game                         0x00079a90 0x75000 + 19088
19  MY Game                         0x00079a50 0x75000 + 19024

据我所知,从崩溃日志中,由于我的代码,崩溃不会发生。这是由于内存不足。那是对的吗?如何找到崩溃发生的地方?任何建议。

1 个答案:

答案 0 :(得分:2)

  

据我所知,从崩溃日志中,由于我的代码,崩溃不会发生。这是由于内存不足。这是对的吗?

不,这不正确。

正在报告内存不足,但您的视图控制器没有正确响应。最常见的原因是保留周期 - see UIViewController purgeMemoryForReason: Crashing on iOS 5。在该答案中,保留周期为SVPullToRefresh,但您的保留周期可能在其他地方。保留周期的最常见原因是未将delegate属性设置为weak

一旦找出问题所在,就可以在viewDidUnload和``didReceiveMemoryWarning`中设置断点,模拟内存警告,并逐步查看代码以查找错误。


Symbolication

此外,此崩溃报告未符号化。通常,您首先要表示崩溃报告。例如,请参阅以下行:

18  MY Game                         0x00079a90 0x75000 + 19088
19  MY Game                         0x00079a50 0x75000 + 19024

在这种情况下,正如Kerni所指出的那样,这两个人只会显示startmain,所以在这种情况下他们不会帮助你。但通常,您应该表示崩溃报告。 (如果您不知道如何执行此操作,请搜索“Xccode symbolicate crash logs”。)