[iOS]iOS中常见的crash信号处理

常见信号

  • SIGTERM
  • SIGSEGV
  • SIGINT
  • SIGILL
  • SIGABRT
  • SIGFPE

Program support utilities

Defined in header <signal.h>

#define SIGTERM /*implementation defined*/

#define SIGSEGV /*implementation defined*/

#define SIGINT /*implementation defined*/

#define SIGILL /*implementation defined*/

#define SIGABRT /*implementation defined*/

#define SIGFPE /*implementation defined*/

解释


SIGTERM

  • 程序结束(terminate)信号,与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出。
  • iOS中一般不会处理到这个信号

SIGSEGV

  • invalid memory access (segmentation fault)
  • 无效的内存地址引用信号(常见的野指针访问)
  • 非ARC模式下,iOS中经常会出现在 Delegate对象野指针访问
  • ARC模式下,iOS经常会出现在Block代码块内 强持有可能释放的对象

SIGINT

  • external interrupt, usually initiated by the user
  • 通常由用户输入的整型中断信号
  • 在iOS中一般不会处理到该信号

SIGILL

  • invalid program image, such as invalid instruction
  • 不管在任何情况下得杀死进程的信号
  • 由于iOS应用程序平台的限制,在iOS APP内禁止kill掉进程,所以一般不会处理

SIGABRT

  • abnormal termination condition, as is e.g. initiated by abort()
  • 通常由于异常引起的中断信号,异常发生时系统会调用abort()函数发出该信号
  • iOS平台,一种是由于方法调用错误(调用了不能调用的方法)
  • iOS平台,一种是由于数组访问越界的问题

SIGFPE

  • erroneous arithmetic operation such as divide by zero
  • 浮点数异常的信号通知
  • 一般是由于 除数为0引起的

信号signal中断crash经常出现的位置

SIGSEGV.png
SIGABRT.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容