如何调试SIGABRT和EXC_BAD_ACCESS引起的crash

1. SIGABRT是处于程序控制状态下的crash,SIGABRT引起的crash是因为系统发现了应用程序正在做一些系统不希望它去做的事情(Exception)。
一般情况下,当SIGABRT发生的时候,会现实如下的bug信息:
如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第1张图片
它并不能精确的定位到crash发生在哪个源文件哪行代码中。为了精确的定位,我们可以使用Exception Breakpoint在Exception发生的时候暂停程序。


如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第2张图片


如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第3张图片
如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第4张图片
如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第5张图片
2.  EXC_BAD_ACCESS意味着你的程序在内存管理方面有bug。与 SIGABRT不同,发生 EXC_BAD_ACCESS错误时,在控制台里你不会得到一个错误的信息,但是你可以通过一些设置得到这些错误信息并进一步定位内存错误发生的位置。


如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第6张图片



如何调试SIGABRT和EXC_BAD_ACCESS引起的crash_第7张图片

注意:当你把选项 Zombie Objects打开的时候,你的应用程序永远不会再释放(dealloc)内存,会导致不停的内存泄漏并最终在某一时刻run out of free memory,所以不要一直开着 Zombie Objects选项,只有当你定位 EXC_BAD_ACCESS错误的时候打开它,当bug解决掉之后,立刻关闭它。

你可能感兴趣的:(如何调试SIGABRT和EXC_BAD_ACCESS引起的crash)