IOS对于程序向自身发送signal信号导致程序崩溃处理

 主要是参考matt大神的博客:http://www.cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html
      。
      。
      。
      注意以下本人呕血经验:
      感觉有点累啊,昨天研究了一个下午:怎么ios不响应signal处理函数呢?。。。额。。原因是xCode编译运行了程序,如果直接发送signal,xCode会直接收到信号立刻中断程序运行,直接跳过signal处理函数。需要手动停止xCode运行的程序,再在模拟器 运行,发送了signal,这样才可以进入了signal处理方法!!(方法里我有把异常信息保存在txt文本了,方便查看)
      signal。。。学过Linux的都知道信号量吧,ios是Linux内核,在程序发生未捕获异常时,程序会向自身发送信号(
SIGABRT、SIGBUS、SIGHUP等。。。),然后程序直接闪退。。。有时候这是无可避免的。作为一款优秀的软件,必须要有异常报告模块,让用户给你发送异常报告信息。Matt的博客里有UncaughtExceptionHandler下载,它几乎能应对所有的异常处理了。

放出处理结果:

IOS对于程序向自身发送signal信号导致程序崩溃处理_第1张图片 这是一个释
放过度引起的异常,程序发送了信号4,即SIGILL(signal.h里可查看),即非法指令异常(http://baike.baidu.com/link?url=Au4Z4-xdqzZAiGsJnY6E2M2fYhC5IHAuMS5IIdHwRhJswxtW4AaRRADv5qQ3vVGI )。这个异常可以在调用栈查看异常地方。

IOS对于程序向自身发送signal信号导致程序崩溃处理_第2张图片 
这是一个使用
[self performSelector:@selector(badAccess) withObject:nil afterDelay:4.0];   这样子出现的异常就比较难查出,调用栈里只可以看出他是使用FireDelayedPerform方法(即延迟调用方法)之后就出现异常,那就在xCode全局查找关键字为: performSelector

异常处理关键是查看程序崩溃前调用的东西~~~

你可能感兴趣的:(ios,异常处理,信号量处理,未捕获异常,signal处理函数)