如何理解和解决崩溃报告:SIGSEGV,SEGV_ACCERR

时间:2012-07-25 08:35:17

标签: ios segmentation-fault crash-reports sigsegv

我有时会收到此崩溃报告:

Name: SIGSEGV
Reason: SEGV_ACCERR
Stack Trace:

0 MyApp 0x00070456 0x1000 + 455766
1 MyApp 0x0007a34d 0x1000 + 496461
2 MyApp 0x0007a4f1 0x1000 + 496881
3 MyApp 0x000d31dd 0x1000 + 860637
4 MyApp 0x00067f0f 0x1000 + 421647
5 MyApp 0x0005ad69 0x1000 + 367977
6 MyApp 0x000081e3 0x1000 + 29155
7 MyApp 0x00008ae9 0x1000 + 31465
8 CoreFoundation 0x35a547e4 __invoking___ + 68
9 CoreFoundation 0x359af7b1 -[NSInvocation invoke] + 160
10 Foundation 0x3556268f -[NSInvocationOperation main] + 114
11 Foundation 0x354fb393 -[__NSOperationInternal start] + 862
12 Foundation 0x35564793 __block_global_6 + 102
13 libdispatch.dylib 0x348dec59 _dispatch_call_block_and_release + 12
14 libdispatch.dylib 0x348e1817 _dispatch_worker_thread2 + 258
15 libsystem_c.dylib 0x32e0edfb _pthread_wqthread + 294

我不明白这个崩溃报告。我也不知道这是什么时候发生的。

有没有办法找到有关此次崩溃的更多信息?

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

您需要对崩溃报告进行符号化,该报告会将第0行到第7行中的地址转换为有意义的类,方法和行号。通常Xcode会自动执行此操作,如果您仍然具有导致崩溃的构建的二进制文件。

答案 1 :(得分:1)

SIGSEV错误是当您尝试获取不允许触摸的内存时发送的信号

解决此问题的最佳方法是在每行放置一个断点和跳线,以便找到问题所在的行

或者您也可以放一些调试日志来查看问题

要了解SIGSEV或SEGV_ACCERR的含义,您可以在互联网上搜索更多信息;)

答案 2 :(得分:1)

问题已经过时了,但约翰史密斯的答案还有更好的方法。

目前,最好的方法是使用分析器(在XCode:Product / Profile中)使用相应的模板运行 最有可能你需要使用“Zombies”模板,现在设备上也支持它,不仅仅是在模拟器上。 使用此工具时,您有更大的机会发现错误使用内存。