Comment on page
02 iOS-常见崩溃分析
- 通过Runtime替换,为系统方法添加容错
- 同时添加日志,上报记录错误
- 保证程序运行稳定的情况下,暴露错误
- 处理方式同上
- 可以再消息传递流程内进行防护
- 别偷懒
- 开启僵尸对象调试选项进行调试
经实验在多个ios版本下都不再触发SIGPIPE,完美解决问题。
- 对一个端已经关闭的socket调用两次write,第二次write将会产生SIGPIPE信号,该信号默认结束进程
在pch中:
// 仅在 IOS 系统上支持 SO_NOSIGPIPE
#if defined(SO_NOSIGPIPE) && !defined(MSG_NOSIGNAL)
// We do not want SIGPIPE if writing to socket.
const int value = 1;
setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &value, sizeof(int));
#endif
- 放主线程
这是一个让程序终止的标识,会在断言、app内部、操作系统用终止方法抛出。通常发生在异步执行系统方法的时候。如CoreData、NSUserDefaults等,还有一些其他的系统多线程操作。 这并不一定意味着是系统代码存在bug,代码仅仅是成了无效状态,或者异常状态。
- enter 数量和 leave 数量要匹配
Last modified 2yr ago