如何使用addr2line命令解析native backtrace
有时遇到ANR问题,查看SWT_JBT_TRACES文件,发现有些是native backtrace,且GAT-LogView目前无法解析这种不规则的native backtrace。
这时可以找到带symbols信息的对应lib库,使用addr2line解析pc指针,就可以得到native backtrace对应的代码行号。
解决方法:
带symbols信息的lib库位于out/target/product/{ProjectName}/symbols/system/lib/
注意:带symbols信息的lib库必须是与复现问题的手机bin档同一次build出来的才可以,必须是位于out/target/product/{ProjectName}/symbols/system/lib/这个目录下的lib库才可以,
从手机system/lib下adb pull出来的lib库不可以用来解析pc指针
Q:如何check lib库是否带有symbols?
A:将lib库copy到linux 开发环境下,在linux Terminal(终端命令行窗口)里面通过file命令来check:
file libhwui.so
若印出的信息后面带有not stripped,则是带symbols信息;
若是stripped,则不带symbols信息;
addr2line使用方法:
步骤一:将需要解析的backtrace对应的lib库拷贝到android gcc目录下
若是64位lib库,将带symbols信息的lib库拷贝到任意一份Android L及以上版本的代码路径下:platform(alps)/prebuilts/gcc/linux-x86/aarch64/cit-aarch64-linux-android-4.9/bin/
若是32位的lib库,将带symbols信息的lib库拷贝到Android KK某版本对应代码下:
platform(alps)/prebuilts/gcc/linux-x86/arm/cit-arm-linux-androideabi-4.8/bin/
备注:黄色部分的路径不一定非要是cit开头的,在该目录下找一个版本最新的目录进去即可
步骤二:用addr2line来逐行解析backtrace:
例如SWT_JBT_TRACES里面某2行trace是:
native: #02 pc 00077540  /system/lib64/libhwui.so
native: #03 pc 00051d90  /system/lib64/libhwui.so
那么如下命令就可以解析出上述trace的代码行号:
addr2line -C -e libhwui.so -f 0x77540
如下是上述2行trace的解析记录:
[xxx@mszswglx07 bin]$addr2line -C -e libhwui.so -f 0x77540
android::uirenderer::Task<android::uirenderer::VertexBuffer*>::getResult() const
/home/jenkins/workspace/5918/build_chambal_cosmos/linux_repo/system/core/include/utils/Condition.h:106
[xxx@mszswglx07 bin]$addr2line -C -e libhwui.so -f 0x51d90
android::uirenderer::OpenGLRenderer::drawRoundRect(float, float, float, float, float, float, SkPaint const*)
/home/jenkins/workspace/5918/build_chambal_cosmos/linux_repo/frameworks/base/libs/hwui/OpenGLRenderer.cpp:2660

Android 系统(172)---如何使用addr2line命令解析native backtrace相关推荐

  1. android系统tts TextToSpeech源码原理解析及定制tts引擎

    TextToSpeech 即文字转语音服务,是Android系统提供的原生接口服务,原生的tts引擎应用通过检测系统语言,用户可以下载对应语言的资源文件,达到播报指定语音的文字的能力.但是一切都是在g ...

  2. Android系统在超级终端下命令大全

    Android系统在超级终端下必会的命令大全(一) busybox BusyBox 是标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包 ...

  3. Android系统(109)---ADB命令

    Android ADB命令 adb的全称为Android Debug Bridge.是android司机经常用到的工具.但是问题是那么多命令写代码已经够费劲了,过段时间再次使用时压根记不住呀.本次的就 ...

  4. Android系统shell中的clear命令实现

    之前一直不太清楚,当我们在shell命令行输入很多命令,会在屏幕上输出一些信息,为什么一执行clear这个命令以后,所有的信息就没了呢? 现在终于搞明白了,找到了clear命令的源代码clear.c ...

  5. android shell 定位 命令,【Adb shell】---玩转 Android系统 查询 应用包名 命令

    1:列出所有应用的包名 pm list packages rk3288:/ $ pm list packages package:com.android.cts.priv.ctsshim packag ...

  6. android 系统按键音framework流程源码解析

    android 系统按键音framework源码解析(基于android 9.0) 今天来看下android中按键音的处理,首先看下按键是在那里开启的.然后再看看当按下按键后一个按键音是怎么播放出来的 ...

  7. Android 系统(126)---Android的死机、重启问题分析方法

    Android的死机.重启问题分析方法 阅读数:11986 Android的死机.重启问题分析方法 1.     死机现象 1.1      死机定义 当手机长时间无法再被用户控制操作时,我们称为死机 ...

  8. Android 系统(115)---死机问题分析

    一.死机现象 1. 死机/phong hang 定义 当手机长时间无法再被用户控制操作时,我们称为死机或者hang 机. 在这里我们强调长时间,如果是短时间,我们归结为Perfomance 问题,即性 ...

  9. Android 系统(173)---Android中图片的三级缓存

    Android中图片的三级缓存 为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量 ...

最新文章

  1. Why Did the Cow Cross the Road III(树状数组)
  2. 基于 Netty 如何实现高性能的 HTTP Client 的连接池
  3. Java将网络地址对应的图片转成本地的图片
  4. 【LeetCode】69. Sqrt(x) (2 solutions)
  5. NgRx使用CreateSelector组装复合Selector
  6. 正则环视 php,正则表达式基本知识(php)
  7. Hibernate的generator属性
  8. 分布式服务下的关键技术(转)
  9. 创建和应用Java包文件的两种方式(转)
  10. MySQL索引原理、失效情况
  11. Maven常见警告解决办法
  12. 对‘pthread_create’未定义的引用_全球两大引文数据库,都在悄悄少算引用次数...
  13. Ulipad快捷键大总结
  14. Vue 中的 key 有什么作用?
  15. qq远程卡主,只能看到桌面,鼠标、键盘操作不了的解决方法
  16. 黑马程序员—-C语言入门十重奏之十renascence
  17. 4.3二叉树的非递归中序遍历输出王道数据结构例程实现
  18. dhuacm出题网站搭建
  19. 保研之路——上科大信息学院直硕夏令营
  20. itan:request-response简介

热门文章

  1. Linux并发与竞争
  2. ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
  3. 深度优先,广度优先,拓扑排序(实战题解)
  4. 菜鸟学习笔记:Java提升篇2(容器2——Map、Set、迭代器)
  5. 二分法解决力扣374.猜数字大小 C语言
  6. Luogu P2733 家的范围 Home on the Range
  7. [HAOI2015]树上染色(树形背包)
  8. 【C#】三种结构:顺序、分支(if、switch、条件运算符)、循环
  9. 【BZOJ2989】数列(CDQ分治,扫描线)
  10. 洛谷P2037 电话号码