Xcode常见的程序崩溃及其调试

                               Xcode常见的程序崩溃及其调试


这个画面是不是很熟悉?

两种常见crash:SIGABRT以及EXC_BAD_ACCESS

SIGABRT是可控的crash,因为系统知道应用出现了一些不该出现的错误比如


这些信息中有一些给出了错误的线索,比如


 “unrecognized selector sent to instance XXX” 这样的错误意味着,程序调用了不存在的方法,即某个对象没有该方法,而你却用该方法向其发送消息。

EXC_BAD_ACCESS,调试起来比较困难,由于内存管理问题,app出现了一些错误的状态。

首先得知道问题出在哪,为了解决这个问题,你可以使用调用栈(也叫栈轨迹或者回溯)。当程序崩掉时,会出现如下图,Xcode(会自动切换到Debug导航栏)


如图,它会显示所有处于活动状态的线程,在崩掉的线程处会有高亮显示,如上图的14 main。通常情况下它会在线程1(Thread1 程序的主线程)崩掉,因为大部分工作都是在主线程上完成的,当然,如果你用到队列或者后台线程,App同样会在其他线程崩掉。

如上图,高亮显示在main.m里面的main函数,但是main函数没有提供有用的信息,所以我们需要进一步挖掘出有用的信息。你可以滑到Debug导航栏的底部,将底部的滑杆推到最右边。它会显示崩溃时的调用栈。如下图所示


调用栈将会显示当前处于活动状态的函数或者方法,由于崩溃,调试器(debugger)暂停了程序,相应得所有的方法和函数也就被冻结了。底部的start方法(main下面)首先被调用,它会调用main函数,即一个应用的入口函数,main函数通常位于调用栈的底部。Main函数会调用UIApplicationMain方法,也就是在main函数中被高亮显示的那一行即

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值