文章目录

  • 一、从 Tombstone 报错日志中查找报错动态库
  • 二、addr2line 命令行工具使用
    • 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工具
    • 32 位动态库使用的 arm-linux-androideabi-addr2line.exe 工具
    • 使用 addr2line 命令行工具分析动态库

Tombstone 报错信息日志文件被保存在了 /data/tombstones/ 目录下 , 先 ROOT 再说 , 没有 ROOT 权限无法访问该目录中的信息 ;

使用 Pixel 2 手机进行调试 , 其它 ROOT 后的手机也可以使用 ;

ROOT 前先 解锁 Bootloader , 参考博客 【Android】Pixel 2 解锁 Bootloader

ROOT 操作 , 参考博客 【Android】Pixel 2 Android 9 系统 ROOT 操作 ( TWRP 下载 | Magisk Manager 下载 | 线刷包下载 | 线刷 9.0 系统 | ROOT 操作 )

参考 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 ) 博客 , 先获取 NDK 的报错日志信息 Tombstone 文件 ;

一、从 Tombstone 报错日志中查找报错动态库


参考 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 ) 博客 , 在上述博客中 , 获取到了 Tombstone 内容如下 :

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'google/walleye/walleye:9/PQ3A.190801.002/5670241:user/release-keys'
Revision: 'MP1'
ABI: 'arm64'
pid: 11561, tid: 11575, name: Binder:11561_3  >>> com.tombstone.demo:process <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc
Cause: null pointer dereference
Abort message: 'art_method.cc:611] Check failed: existing_entry_point != nullptr void android.accessibilityservice.AccessibilityService.<init>()@0x7e70e6f588'x0  0000000000000000  x1  0000000000000000  x2  0000007e86085ca1  x3  0000000000000000x4  0000000000000000  x5  0000007e7dc69b6f  x6  000000000000000a  x7  000000000000000ax8  7af92b4d5bbf85bd  x9  7af92b4d5bbf85bd  x10 0000000000000000  x11 0000007f068804a8x12 20646c6568207c20  x13 3d7365786574756d  x14 00000000ffffffff  x15 0000007f0687fc18x16 0000007e8612bef0  x17 0000007f097679b0  x18 0000007f0687f69a  x19 0000007f06880480x20 0000000000000000  x21 0000007e86051f10  x22 0000000000000000  x23 0000007e70e6f588x24 0000000000000001  x25 0000000000000000  x26 0000000000000000  x27 0000007e863434a0x28 0000000000000001  x29 0000007f068802c0sp  0000007f068802b0  lr  0000007e85f9162c  pc  0000007e85f91630backtrace:#00 pc 00000000004a5630  /system/lib64/libart.so (art::CurrentMethodVisitor::VisitFrame()+24)#01 pc 0000000000484608  /system/lib64/libart.so (_ZN3art12StackVisitor9WalkStackILNS0_16CountTransitionsE0EEEvb+1656)#02 pc 0000000000495d9c  /system/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+316)#03 pc 00000000004afd5c  /system/lib64/libart.so (art::DumpCheckpoint::Run(art::Thread*)+844)#04 pc 00000000004a8a9c  /system/lib64/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)+476)#05 pc 00000000004a7cd4  /system/lib64/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool)+500)#06 pc 000000000046a9d0  /system/lib64/libart.so (art::Runtime::Abort(char const*)+392)#07 pc 0000000000008d2c  /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+724)#08 pc 00000000000d07f0  /system/lib64/libart.so (art::ArtMethod::GetOatQuickMethodHeader(unsigned long)+608)#09 pc 00000000001a0d0c  /system/lib64/libart.so (art::FaultManager::IsInGeneratedCode(siginfo*, void*, bool)+908)#10 pc 00000000001a0654  /system/lib64/libart.so (art::FaultManager::HandleFault(int, siginfo*, void*)+92)#11 pc 0000000000002b80  /system/bin/app_process64 (art::SignalChain::Handler(int, siginfo*, void*)+568)#12 pc 000000000000088c  [vdso:0000007f0bc35000]#13 pc 0000000000553bcc  /system/lib64/libart.so (ExecuteMterpImpl+33356)#14 pc 0000000000390f46  /system/framework/boot-framework.vdex (android.app.ContextImpl.sendBroadcast+94)#15 pc 0000000000255e68  /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.2088410233+496)#16 pc 000000000025b9e8  /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216)

在 backtrace 处查找报错点 :

#00 pc 00000000004a5630  /system/lib64/libart.so
(art::CurrentMethodVisitor::VisitFrame()+24)

由上面可以看到 , 出错的位置是 /system/lib64/libart.so 动态库的 0x00000000004a5630 地址 , 具体的该地址对应的代码 , 需要通过 addr2line 命令行工具进行确定 ;

二、addr2line 命令行工具使用


64 位动态库使用的 aarch64-linux-android-addr2line.exe 工具

在 Android NDK 开发中 , 使用的 addr2line 命令行工具是在 SDK 的

ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin

目录下的 aarch64-linux-android-addr2line.exe 工具 ;

32 位动态库使用的 arm-linux-androideabi-addr2line.exe 工具

注意 , 不同类型的动态库使用不同的 323232 位的动态库 , 需要使用 的 addr2line 命令行工具是在 SDK 的

ndk-bundle\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin

目录下的 arm-linux-androideabi-addr2line.exe ;

使用 addr2line 命令行工具分析动态库

执行

aarch64-linux-android-addr2line.exe -e xx/libart.so 00000000004a5630

命令 , 即可分析 xx/libart.so 动态库的 0x00000000004a5630 地址的代码 ;

【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )相关推荐

  1. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )

    文章目录 一.崩溃信息描述 二.手机命令行操作 三.电脑命令行操作 四.Tombstone 内容 Tombstone 报错信息日志文件被保存在了 /data/tombstones/ 目录下 , 先 R ...

  2. 【致敬嵌入式攻城狮第2期活动预热征文】解决瑞萨RA2E1开发板在RT-Thread的版本中编译报错 error: ‘board_cfg.h‘ file not found

    解决瑞萨RA2E1开发板在RT-Thread的版本中编译报错 error: 'board_cfg.h' file not found 继上上周在RA2E1开发板上跑通了RT-Thread最新版本的代码 ...

  3. SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-

    SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q- 商品主数据755,物料类型是FOOD,基 ...

  4. Android Studio打不开,出现start failed的报错

    Android Studio打不开,出现start failed的报错 java.util.concurrent.CompletionException: java.lang.IllegalState ...

  5. 最近项目开发再一次遇到了启动idea报错:Plugin Error Problems found loading plugins: Plugin “GlassFish Integration“ was

    最近项目开发再一次遇到了启动idea报错:Plugin Error Problems found loading plugins: Plugin "GlassFish Integration ...

  6. git 公钥提交代码_Git提交代码push的时候报错常见错误

    今天我想rk的sdk包里面的一些东西提交到我的git服务器上,结果,总是报错,折腾了一下午,结果才解决. 首先看看我提交代码的时候,报错的信息: git.exe push --progress &qu ...

  7. 遇到代码不生效或者报错不要慌

    以轮播图为例: 当遇到控制台报错 这种情况就需要看控制台报的错误是什么. 比如上面这种就是说变量i未定义,直接使用,网页就会报错. 当控制台没有报错,轮播图没有实现自动播放的功能 这时候需要检查自己那 ...

  8. 公众号开发-群发图文中插入小程序卡片报错 invalid content hint 的解决

    如果你也正在开发群发图文中插入小程序的功能,那么大概率也会遇到这问题. 之前通过微信第三方开放平台开发过一个可以管理多个公众号的系统,具体功能和效果可以参考 微信第三方开放平台代公众号实现业务 . 为 ...

  9. QT开发的软件在新电脑上打开报错

    QT开发的软件在新电脑上打开报错 之前用QT开发的一个尿素泵总成电检台测试软件,拷贝到别的电脑上,运行时出现"Cannot load xxx.dll"的警告,于是想办法找各种解决办 ...

最新文章

  1. 二十五、内存的基础知识
  2. 几大最短路径算法比较
  3. Java中List的用法
  4. [Qt教程] 第47篇 进阶(七) 定制Qt帮助系统
  5. Qt 有层级关系的qss样式,使用id定位到具体控件
  6. python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...
  7. 三、服务器和客户端的信息函数
  8. javascript 设计模式_用英雄联盟的方式讲解JavaScript设计模式(二)
  9. 最长XXX子序列(什么都好啦)
  10. C++ 原子操作 std::atomic<int>
  11. redis info信息注解
  12. python入门学校_如何学习Python,以及新手如何入门?
  13. Ubuntu常用命令汇总
  14. 如何在服务器发布网站
  15. 三条中线分的六个三角形_为什么三角形的三条中线把三角形分为面积相等的六块...
  16. hualinux 编程概念 3.11 快速原型模型:以最快最小代价完成产品特性
  17. Openstack的安装部署教程
  18. 中职学校计算机教学方法初探,基于课堂实效的中职计算机教学初探
  19. 做SEO,如何分析竞争对手网站-趣味seo
  20. 终极单词index 排序 S

热门文章

  1. 电脑已连接WIFI,但是现实网络不可用
  2. Python中cv2.imread()函数不能读中文文件名文件
  3. 出海困局 | 国内增长出现瓶颈,大厂的出海“野心”也藏不住了!
  4. 【C++深陷】之“decltype”
  5. Python金融数据三:Python程序计算看涨期权
  6. linux嵌入式优势,嵌入式linux的优势有什么?
  7. Java的集合框架(JCF)
  8. CC00332.CloudKubernetes——|KuberNetes运维.V50|——|黑盒监控.v05|blackbox.v05|targets获取不到值|
  9. 乱七八糟的分析View体系
  10. 语谱图的实现与种类,与画图