在应用发布到appStore时,会出现各种崩溃问题,这时可以通过atos及DSYM,定位具体崩溃的位置帮助定位问题
使用命令行atos 解析iOS app的崩溃日志 部分信息:
- 获取对应的DSYM文件
-
知道部分崩溃信息
崩溃信息 - atos -arch arm64 -o xxx.app/xxx -l 0x1044dc000(第四列十六进制数字) 0x0000000105440c9c(第三列十六进制数字)
获取app的UUID值
dwarfdump —uuid appName.app/appName
获取DSYM的UUID值
dwarfdump —uuid appName.app.dSYM
日志信息
常见崩溃编码:
0x8badf00d
该编码表示应用是因为发生watchdog超时而被iOS终止的。 通常是应用花费太多时间而无法启动、终止或响应用系统事件。
0xbad22222
该编码表示 VoIP 应用因为过于频繁重启而被终止。
0xdead10cc
该代码表明应用因为在后台运行时占用系统资源,如通讯录数据库不释放而被终止 。
0xdeadfa11
该代码表示应用是被用户强制退出的。根据苹果文档, 强制退出发生在用户长按开关按钮直到出现 “滑动来关机”, 然后长按 Home按钮。强制退出将产生 包含#####0xdeadfa11 异常编码的崩溃日志, 因为大多数是强制退出是因为应用阻塞了界面。
EXC_CRASH // SIGABRT
进程异常退出。该异常类型崩溃最常见的原因是未捕获的Objective-C和C++异常和调用abort()。如果他们需要太多的时间来初始化,程序将被终止,因为触发了看门狗。如果是因为启动的时候被挂起,所产生的崩溃报告异常类型(Exception Subtype)将是launch_hang。
EXC_BREAKPOINT // SIGTRAP
进程试图执行非法或未定义指令。这个进程可能试图通过一个配置错误的函数指针,跳到一个无效的地址。
EXC_BAD_ACCESS
访问一个已经释放的对象,或者向他发送消息时,EXC_BAD_ACCESS就会出现。造成EXC_BAD_ACCESS最常见的原因是,对属性用错了所有权修饰符,这会导致对象被释放。
SIGSEGV
段错误信号(SIGSEGV)是操作系统产生的一个严重的问题,属于EXC_BAD_ACCESS的子类型,当硬件出现错误,访问不可读的内存地址或者向受保护的内存地址写入数据时,就会发生这个错误。这种错误并不常见,而导致这种错误最常见的原因是不正确的类型转换。
SIGBUS
总线错误信号(SIGBUS)代表无效内存访问,即访问额内存是一个无效的内存地址。也就是说,那个地址指向的位置根本不是物理内存地址。和SIGSEGV一样,SIGBUS也属于EXC_BAD_ACCESS的子类型。
SIGILL
SIGILL代表SIGNAL ILLEGAL INSTRUCTION(非法指令信号)。当在处理器上执行非法指令时,它就会发生。执行非法指令是说,将函数指针传给另一个函数时,该函数指针由于某种原因是坏的,指向了一段已经释放了的内存或者一个数据段。
SIGABRT
SIGABRT代表SIGNAL ABORT(中止信号)。当操作系统发现不安全的情况时,它能够对这种情况进行更多的控制;必要的话,它能要求进程进行清理工作。通常UIKit框架在特定的前提条件没有满足或者一些其他情况出现时候调用C函数abort(由它来发送此信号)。当SIGABRT出现时,控制台通常会输出大量的信息,说明哪里出错。由于SIGABRT是可控制的,所有可以再LLDB控制台上输入bt命令打印出回溯信息。
生活如此美好,今天就点到为止。。。
网友评论