1、如何跟踪app的崩溃率和线上闪退?

iOSapp闪退时系统会生成一个crash日志,保存在设备上。crash日志里面有很多有用的信息,比如对内存堆栈信息和内存映像,通过解析这些信息来解析出crash时的代码逻辑。

crash一般有两种原因:违反iOS系统的规则导致crash和代码逻辑BUG导致crash

(1)内存报警到crash

当iOS系统内存吃紧的时候,它的VM会发出内存警告,尝试回收一些内存,如果情况没有得到改善iOS系统会终止应用程序的后台应用以回收内存,如果还是你能解决内存吃紧的问题,正在运行的程序会被终止掉。主动将客户端的之行动作写到一个log文件中,这样程序员就可以把内存的使用情况写到log文件中,当内存吃紧时就会对客户端有一个提醒,调用Instrument中的Allocations和leaks进行内存泄漏的检查。

(2)相应超时

当应用程序对一些事件(启动、挂起、结束等)响应不及时,这时苹果的watchDog机制就会将应用程序干掉,并生成一份crash日志,当遇到WatchDog日志时可以检查appdelegate里面的几个方法是否有严重的UI阻塞

(3)强制关机

一看到强制关机,一般会想到按住home键,但是这种情况只是将应用程序切换到后台,不会产生crash日志。当应用程序阻塞界面,停止响应时才会产生crash日志。这里所指的强制关机指的是,按住电源键,知道滑动关机,再按住home键,这是当前的应用程序会被终止,并产生一份crash日志


应用逻辑的Bug

SEGV:无效内存地址

SIGBUS:总线错误。访问的是有效地址,但总线异常

SIGILL:尝试非法指令

SIGPIPE:管道错误。比如管道的另一端没有线程接手数据

常见的崩溃原因一般是代码逻辑原因和资源原因比如数组越界


搜集crash

mac 上可以使用xocode-》window-》device选择device log进行查看

市场上也有一些软件进行crash日志服务

crashlytics

bug sense

其实大多数的商业软件都是从系统提取crash日志进行再一次的封装,上传到对应的服务器进行解析,很多采用开源的Plcrashereportor进行上传于解析