Android native crash debug
目录
查看crash信息
adb logcat
/data/tombstones/
debugger
分析stack信息
addr2line工具
脚本工具stack
参考文档:
查看crash信息
adb logcat
/data/tombstones/
adb logcat中的crash信息中会指明tombstones 文件名:
Tombstone written to: /data/tombstones/tombstone_06
debugger
tombstone是程序发生crash时打印的stack信息, 如果要实时打印某个进程的stack信息,如果某个时刻程序出现异常尤其是卡死不动的时候, 这个命令会非常有用:
adb shell ps -A |grep surf
system 20225 1 2469536 45520 do_epoll_wait 0 S surfaceflingeradb shell debuggerd -b 20225
debugger 会打印pid下各个thread的stack信息, 类似于, tombstone文件中也会有类似信息。
"Signal Catcher" sysTid=2682
#00 pc 00000000000d11d8 /apex/com.android.runtime/lib64/bionic/libc.so (__rt_sigtimedwait+8) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
#01 pc 000000000008fc20 /apex/com.android.runtime/lib64/bionic/libc.so (sigwait+68) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
#02 pc 00000000004d93b8 /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::WaitForSignal(art::Thread*, art::SignalSet&)+392) (BuildId: 8fb5976d4465346647f3e5e5870bdc7a)
#03 pc 00000000004d8138 /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::Run(void*)+268) (BuildId: 8fb5976d4465346647f3e5e5870bdc7a)
#04 pc 00000000000e68a0 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
#05 pc 0000000000084b6c /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
分析stack信息
addr2line工具
如上stack 信息中其中的#00 pc后面的数字即为错误发生的地址,如00000000000d11d8,那么该地址对应的具体函数的那一行呢?可以使用工具addr2line来分析, 格式如下:
addr2line -C -f -e lib.so 地址1 地址2
addr2line在ndk中,可以在google官方下载,一般存储位置为, 注意要解析的lib是64位还是32位, 不同lib使用不同的addr2line。
64位:/Sdk/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-addr2line
32位: /Sdk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line
如果本地有android 源码, 如64位系统,addr2line在以下地址也可以找到
cd prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
然后运行命令:
./aarch64-linux-android-addr2line -f -C -e libxxx.so <addr1> <addr2> ...
其中libxxx.so 需要有符号表, 如果是自己编译的系统, 可在以下位置获取:
out/target/product/[productname]/symbols/system/lib/****.so
脚本工具stack
如果有相应的源码文件, 且编译时是unstripped binaries, 将stack 信息粘贴到脚本
development/scripts/stack中, 打印detail行号。
adb pull /data/tombstones/tombstone_06
python stack < tombstone_06
使用lldb调试:
参考: https://www.jianshu.com/p/3eb6315cb710
参考文档:
使用addr2line,第二个解决更具体: 介绍addr2line调试命令 - Gityuan博客 | 袁辉辉的技术博客
Android Native报错定位(addr2line工具的使用)_SuperDali的博客-CSDN博客_addr2line android
google: https://source.android.com/devices/tech/debug/index.html
debuggerd: https://source.android.com/devices/tech/debug/gdb
Android native crash debug相关推荐
- Android Native crash 处理案例分享
简介:Android Native crash 处理案例分享 1. 背景 目前 mPaas[1] Android使用Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一款 ...
- 基于友盟+U-APM解决客户小姐姐Android Native Crash问题,小姐姐说我真棒,要把她闺蜜介绍给我
文章目录 一.遇到问题 二.Native日志分析 三.信号量(signal) 和 错误码(code)分析 四.PC指针addr2line定位 4.1 addr2line路径 4.2 so路径 4.3 ...
- Android native crash解析
当某个进程发生crash时会出现下面的错误日志,它可能出现在logcat日志或者/data/tombstones目录下的tombstone文件中 --------- beginning of cras ...
- Android Native Crash崩溃及错误原因分析二-实战解决
一. 简述 之前有一篇文章讲诉了Android实际开发过程中一些崩溃的原因,以及对崩溃类型做了详细的介绍,简单回顾一下:Crash类型:Java和Native,JavaCrash中明显会打印出Andr ...
- android native crash的处理机制
拦截所有信号 Linux信号机制 1.程序奔溃在Unix-like系统中,所有的崩溃都是编程错误或者硬件错误相关的,系统遇到不可恢复的错误时会触发崩溃机制让程序退出,如除零.段地址错误等.异常发生时, ...
- android crash分析工具,Android Crash之Native Crash分析
前言 上一篇给大家介绍了Android Crash中的Java Crash分析,我们可以知道Java Crash一般会弹出提示框告诉我们程序崩溃了,通常使用Crash工具都能够捕获到:本篇博客来谈谈如 ...
- Android Native程序crash的一些定位方法简介
Android Native程序crash的一些定位方法简介 经常,避免不了,我们的代码会崩溃.如果crash在native代码上,Android会和其他Linux一样,生成一份core dump,将 ...
- 当Android发生Native Crash时,Coredump能为我们带来什么信息?
更多内核安全.eBPF分析和实践文章,请关注博客和公众号: CSDN博客:内核功守道 公众号: 内核功守道 1.概述 1.1 Coredump形成原因 1.2 Coredump的作用 2.使能Cor ...
- Android稳定性系列8 Native crash处理流程
一 Native Crash 从系统全局来说,Crash分为Framework/App Crash, Native Crash,以及Kernel Crash. 对于framework层或者app层的C ...
- android 中断处理流程,Android P的native crash处理流程
一.概述 Android系统有监控程序异常退出的机制,这便是本文要讲述得debuggerd守护进程.当发生native crash或者主动调用debuggerd时,会输出进程相关的状态信息到文件或者控 ...
最新文章
- 从构建分布式秒杀系统聊聊线程池
- python毕业设计开题报告-基于Python的教学互动系统的设计与实现开题报告
- 210312阶段三通过sqlite3源码安装sqlite3
- Java第二次实验报告——Java面向对象程序设计
- 深度解析DDD中台和微服务设计
- String被设计成不可变和不能被继承的原因
- 3d pdf reader android,3D PDF Reader
- vs调用matlab功能,vs调用matlab
- 2.开发Mip组件的第一个demo(点击关闭按钮,关闭外层dom)
- 利用安卓手机的OTG共享有线网络
- Spring自带的工具类总结
- 最全的 Charles 抓包工具详解
- Android 7.0后SettingProvider ContactsProvider TelephonyProvider MediaProvider数据库位置
- 江西省吉安市永丰县市政花园(市政服务大楼[厅]) 工程质量及违法违规建筑容积率问题2011年11月简述报告
- php怎么将农历转换成公历,php实现公历农历转换
- mysql 获取当天0点 和 当天23点59分59秒
- latex 中对同一脚注进行引用
- python---Web前端HTML(超文本标记语言)
- appium远程连接---逍遥模拟器
- 关于真空荧光显示屏的·学习记录
热门文章
- easyExcel 导出 excel 自定义表头
- Kaggle注册及绑定手机号
- 计算机里找不到用户文件夹,电脑里没有appdata文件夹,c盘users文件夹可以删除吗...
- 部分js文件在360浏览器极速模式下不加载,不执行的原因
- C++编程常见问题—error: passing ‘const std::map<>]‘ discards qualifiers
- rpm 如何安装mysql_如何使用rpm安装MySQL
- swarm主网BZZ挖矿:钱包如何添加BZZ合约?如何查钱包余额?
- 山东理工——1019
- 论文解读|BMVC 2019 |Fast-SCNN Fast Semantic Segmentation Network
- 简单神经网络手算笔记