iOS 定位代码中崩溃位置

作者: ChinaGoodStaff | 来源:发表于2016-10-25 15:08 被阅读773次

    在调试程序的时候,总是碰到crash的bug,而且一追踪就是一些汇编的代码,让人特别疑惑。
    一般情况下可以通过增加两个断点来解决此问题,方法介绍如下:
    基本上有错误分为以下几种类型:

    signal(SIGABRT, MySignalHandler);
    signal(SIGILL, MySignalHandler);
    signal(SIGSEGV, MySignalHandler);
    signal(SIGFPE, MySignalHandler);
    signal(SIGBUS, MySignalHandler);
    signal(SIGPIPE, MySignalHandler);
    

    SIGABRT和EXC_BAD_ACCESS较为特殊,算是比较好跟进。
    SIGABRT是系统报错,在memery warning之后,系统会把程序强制退出,报的就是这个错误。
    EXC_BAD_ACCESS 大多数时候是内存提前释放而引起的问题,或者访问的方法不存在引起的。

    一、Exception breakpoint 的添加。
    1.切换到breakpoint 视图界面
    1.png
    2.点击最底端的"+"按钮,添加Add Exception BreakPoint,这个就是捕获所有的exception, 貌似stackoverflow上说,bad_access那种错误无法捕获的,这个用于捕获那些SIGSEGV 的错误。
    2.png 屏幕快照 2016-10-25 下午2.48.08.png
    3.添加完成之后的界面。
    屏幕快照 2016-10-25 下午3.04.31.png
    二、Symbolic breakpoint的添加

    前两步和一 基本是一样的,不截图了,只是在第二步选择的时候选 Add Symbolic BreakPoint

    第三步截图;添加完成之后添加上objc_exception_throw

    屏幕快照 2016-10-25 下午2.52.27.png

    完成,添加完成只两个断点之后,程序中很多异常也可以捕获了,直接定位到出问题的位置。

    相关文章

      网友评论

      • ChinaGoodStaff:这个用起来确实方便多了,以后还会添加更好的一些方法

      本文标题:iOS 定位代码中崩溃位置

      本文链接:https://www.haomeiwen.com/subject/xqmruttx.html