定位程序崩溃点的方法探究

1.添加通用断点

选择 BreakPoint Navigator,点击右下角的 ‘+’ ,然后在弹窗中选择 ‘Add Exception BreakPoint’

2.重写object的respondsToSelector方法

1.重写object的respondsToSelector方法,现实出现EXEC_BAD_ACCESS前访问的最后一个object.因为有时候程序崩溃根本不知错误发生在什么地方。

在可能出现问题的 .m 或者.mm 文件中加入以下代码

#ifdef DEBUG
-(BOOL) respondsToSelector:(SEL)aSelector {  
    printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]);  
    return [super respondsToSelector:aSelector];  
}  
#endif

在 other c flags中加入-D DEBUG(记住请只在Debug Configuration下加入此标记),这样当你程序崩溃时,Xcode的console上就会准确地记录了最后运行的object的方法。

3最终方案

EXC_BAD_ACCESS 错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作.那么我们应该启用 僵尸对象.方法如下:
Product->Scheme->Edit Scheme->Arguments 的 Environment Variables 中,增加标计位NSZombieEnabled设为YES)objc
通过活动监视器,拿到我们程序进程的 pid,后面一个参数是崩溃的地址。

sudo malloc_history pid 0x7a692620

终端提示,没有打印 MallocStackLogging
需要在 Xocde 中配置的.按照刚刚配置 NSZombieEnabled的位置和方式,添加一个参数:
MallocStackLoggingNoCompact 值设置为 YES
然后继续重新编译运行,查看 pid ,查看崩溃的内存地址。
见到终端打印出了调用顺序,一般来说,是最后一个你自定义的方法导致的崩溃。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *****************************(转载自此网址)********************...
    叶舞清风阅读 4,955评论 0 5
  • 断点(转载) http://mp.weixin.qq.com/s?__biz=MzA4ODk0NjY4NA==&m...
    liwendong阅读 5,530评论 0 0
  • 前言 Bebug调试程序是开发中最常见的问题,对于一些简单有效的调试技巧的了解是很有必要的。这篇文章就列举Debu...
    進无尽阅读 4,066评论 0 2
  • 这里记录一下自己学习到的一些XCode调试的方法。这些调试方法可以让我们使用XCode编写代码进行调试时用起来更顺...
    DestinyFighter_阅读 19,701评论 0 14
  • 前言 iOS崩溃是让iOS开发人员比较头痛的事情,app崩溃了,说明代码写的有问题,这时如何快速定位到崩溃的地方很...
    lp_lp阅读 10,418评论 0 16

友情链接更多精彩内容