zoukankan      html  css  js  c++  java
  • iOS crash 崩溃问题的追踪方法

    在调试程序的时候,总是碰到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 大多数时候是内存提前释放而引起的问题,或者访问的方法不存在引起的。

    追踪程序的调用stacktrace的方法,跟踪问题:

    一般出错了之后出现的常见界面,再熟悉不过了。。

    切换到breakpoint界面,拖动底端的slider按钮,显示调用堆栈

    虽然调用堆栈已经出来了,但是都是一堆的汇编代码,无法给予明确的信息。。

    剩下的就是今天要讲的问题:添加Symbol breakpoint  Exception breakpoint

    Exception breakpoint添加 的添加步骤

    一、Exception breakpoint 的添加。

    1、切换到breakpoint 视图界面

    2、点击最底端的"+"按钮,添加Add Exception BreakPoint,这个就是捕获所有的exception, 貌似stackoverflow上说,bad_access那种错误无法捕获的,这个用于捕获那些SIGSEGV 的错误。

    3、添加完成之后的界面。

    二、Symbolic breakpoint的添加

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

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

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

    当然程序中最好也加上异常处理的代码,可以参考这个处理,一般都是这个方式处理的

    http://www.cocoachina.com/newbie/tutorial/2012/0829/4672.html

  • 相关阅读:
    Java 实现 蓝桥杯 生兔子问题
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    深入探究VC —— 资源编译器rc.exe(3)
    深入探究VC —— 编译器cl.exe(2)
    深入探究VC —— 编译器cl.exe(1)
  • 原文地址:https://www.cnblogs.com/easonoutlook/p/2835884.html
Copyright © 2011-2022 走看看