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

17

有时候我会收到以下崩溃报告:

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

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

有没有办法更多地了解这个崩溃?

我该如何解决这个问题?


您需要对崩溃报告进行符号化,这将把第0到7行中的地址转换为有意义的类、方法和行号。通常情况下,如果您仍然拥有导致崩溃的构建二进制文件,Xcode会自动完成此操作。您尝试将报告导入Xcode组织器以获取符号化结果了吗?您是如何获得此报告的? - Kerni
@Kerni 我正在从crittercism.com获取崩溃报告。我正在使用iOS的crittercism SDK。我发现应用程序在某些设备上崩溃,并在我的帖子中获得日志。我可以下载报告,但它是一个文本文件。当我将其拖放到xcode中时,它会打开文本文件。我该怎么办? - brush51
@Kerni,感谢您的回答。我已经对其进行了符号化处理,现在我知道它崩溃的位置了。请将其作为答案编写,以便我可以将其标记为已解决。 - brush51
我认为crittercism有一个符号化功能,你可以上传dSYM文件,他们会对其进行符号化。不过我不确定,因为我正在使用自己托管的服务 :) - Kerni
3个回答

6

您需要将崩溃报告符号化,这将把第0至7行中的地址转换为有意义的类、方法和行号。如果您仍然拥有导致崩溃的构建的二进制文件,通常情况下,Xcode会自动完成此过程。


2

虽然这个问题比较老,不过有比John Smith的答案更好的方式。

目前最好的方法是使用性能分析器(在XCode中:Product/Profile),并使用相应的模板。
你很可能需要使用“僵尸”模板,现在它不仅支持模拟器,还支持设备。 使用此工具可以更容易地发现内存使用不正确的情况。


0

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

解决此问题的最佳方法是设置断点,并逐行跳转以查找问题所在的行

或者,您还可以放置一些调试日志以查看问题所在的位置

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


56
我在互联网上搜索后来到了这里 :( - Saltymule
4
我也搜索了SIGSEV并且找到了这里。与其让我们去搜索互联网,为什么不给一个摘要呢? - James Andrews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接