浅谈 Android Tombstone(墓碑日志)分析步骤

这篇具有很好参考价值的文章主要介绍了浅谈 Android Tombstone(墓碑日志)分析步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        最近项目产品刚刚出货,客户退机、死机事件频发。日常解决bug中,少不了和墓碑日志打交道,截止今天之前,见到墓碑日志都是一脸懵逼,不知道怎么分析。最近又有了两个日志,硬着头皮看吧。之所以称之为浅谈,也的确是实事求是了,因为一顿操作下来,即使找到了日志报错的位置,我好像还是解决不了问题,不得其道。Android 开发,任重而道远啊。

        首先,要学会站在巨人的肩膀上处理问题,先看看别人都怎么处理的,对处理步骤有个脸熟,再上手操作,所谓先知道,再做到,再熟练。

        参考:

https://www.cnblogs.com/codertian/p/5980426.htmlAndroid Tombstone(墓碑日志)解决步骤_墓碑日志怎么看_ZalGGboy的博客-CSDN博客

Add2line_addr2line file format not recognized_要努力的大倩的博客-CSDN博客

【我的Android进阶之旅】如何在Android Studio开发NDK的时候,通过addr2line或者ndk-stack来定位出错代码的位置_android studio ndk找不到addr2line_字节卷动的博客-CSDN博客

https://www.cnblogs.com/pyjetson/p/14924240.html

android 查看so 方法_关于android调用栈的使用以及使用addr2line定位crash具体位置_weixin_39947016的博客-CSDN博客

【汇编实战开发笔记】一段汇编代码如何“反编译”成C代码?-云社区-华为云


 

【汇编实战开发笔记】ARM汇编基础的三大块知识_arm 汇编 ands r1 ,r2_架构师李肯的博客-CSDN博客

       

        好了,看了就等于会了,开始干吧。

        看第一处:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'qti/trinket/trinket:11/RKQ1.211119.001/37:user/test-keys'
Revision: '0'
ABI: 'arm64'
Timestamp: 2023-06-15 00:54:53+0800
pid: 2451, tid: 2451, name: init  >>> /system/bin/init <<<
uid: 0
signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Abort message: 'cannot setexeccon('u:r:qti-testscripts:s0') for qti-testscripts: Invalid argument'
    x0  0000000000000000  x1  0000000000000993  x2  0000000000000006  x3  0000007ff60ca470
    x4  0000000000000000  x5  0000000000000000  x6  0000000000000000  x7  000000000000000a
    x8  00000000000000f0  x9  33f5a0c3d7ce4b23  x10 0000000000000000  x11 ffffffc0ffffffdf
    x12 0000000000000001  x13 3a73747069726373  x14 0000007f98608d22  x15 0000ffff00000fff
    x16 0000007f98605c80  x17 0000007f985e7bb0  x18 0000007f98fd0000  x19 0000000000000993
    x20 0000000000000993  x21 00000000ffffffff  x22 0000007f98e90000  x23 0000007f98e90000
    x24 b400007e181631d0  x25 0000007ff60cad71  x26 0000000000000000  x27 0000007ff60caab0
    x28 0000007f9859f8ec  x29 0000007ff60ca4f0
    lr  0000007f9859b3e0  sp  0000007ff60ca450  pc  0000007f9859b40c  pst 0000000000000000

backtrace:
      #00 pc 000000000004e40c  /system/lib64/bootstrap/libc.so (abort+164) (BuildId: f4881cdb04823cc0d8c0fa3f95c4db2e)
      #01 pc 0000000000011db0  /system/lib64/libbase.so (android::base::DefaultAborter(char const*)+12) (BuildId: 01a12dd5224373edcc3a74506f64a9c9)
      #02 pc 0000000000013978  /system/lib64/libbase.so (android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*)+76) (BuildId: 01a12dd5224373edcc3a74506f64a9c9)
      #03 pc 0000000000012fa4  /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+320) (BuildId: 01a12dd5224373edcc3a74506f64a9c9)
      #04 pc 0000000000064690  /system/bin/init (android::init::Service::SetProcessAttributesAndCaps()+712) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #05 pc 0000000000067250  /system/bin/init (android::init::Service::Start()+7808) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #06 pc 0000000000059fb4  /system/bin/init (android::init::do_start(android::init::BuiltinArguments const&)+316) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #07 pc 000000000003f7fc  /system/bin/init (android::init::RunBuiltinFunction(std::__1::function<android::base::expected<void, android::base::ResultError> (android::init::BuiltinArguments const&)> const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)+480) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #08 pc 000000000003f9ac  /system/bin/init (android::init::Command::InvokeFunc(android::init::Subcontext*) const+284) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #09 pc 00000000000403f8  /system/bin/init (android::init::Action::ExecuteCommand(android::init::Command const&) const+76) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #10 pc 00000000000402f4  /system/bin/init (android::init::Action::ExecuteOneCommand(unsigned long) const+332) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #11 pc 000000000006ed58  /system/bin/init (android::init::ActionManager::ExecuteOneCommand()+184) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #12 pc 00000000000844d4  /system/bin/init (android::init::SecondStageMain(int, char**)+6916) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #13 pc 000000000002e178  /system/bin/init (main+292) (BuildId: e9ea95e23ad71213480eae7c32ad286f)
      #14 pc 00000000000499e4  /system/lib64/bootstrap/libc.so (__libc_init+108) (BuildId: f4881cdb04823cc0d8c0fa3f95c4db2e)


        先看 #14,它这里是首次调用的地方。按照前人的丝滑小连招,执行命令(这里在Linux环境中使用哪个目录下的 addr2line,参数怎么带,偏移位置写几位,这都是坑,看了上面的文章后,最后终于运行下面命令成功):

./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e ./out/target/product/qssi/symbols/system/lib64/bootstrap/libc.so 000499e4

返回结果:

android tombstone解析,android

 如上面结果所示,说明:

①问题发生在 __libc_init 方法中;

②具体地,问题发生在 bionic/libc/bionic/libc_init_dynamic.cpp 中的 __libc_init 方法中,更具体地,是第 151 行。

看看这个地方:

android tombstone解析,android

         这只是代码调用链中,位于链首的一个方法,不代表问题就是出在这里。按常理,这个时候我们需要使用上面的命令,将 #14 到 #00 整个调用链都完善出来,观察调用链中的层层调用,看看问题出在哪里,再确定一下这是不是一个值得关注的问题,以及这是一个什么问题,怎么解决这个问题。

        先不着急逐个找出来,先大略从 #14 到 #00 看一下,好像发现了一点儿端倪:调用链中最后一个 #00 调用处,应该是 abort 了一个信息, 即上面的信息:

Abort message: 'cannot setexeccon('u:r:qti-testscripts:s0') for qti-testscripts: Invalid argument'

        那这里先查看这个 log 信息是从哪里打印出来的,不也是解决问题的思路么(当然,并不一定所有的墓碑日志会有这个abort message)。

        说干就干,看一下#14到 #00,大概知道这里问题大概率是发生于系统刚刚启动时,所以查找这个目标日志,基本在init相关的代码中查找即可,如下:


android tombstone解析,android

        找到了,查看代码具体位置:
 android tombstone解析,android

         看上图中标记出来的行数,和方法名称,刚刚好和 #04 对应上了。所以,这个问题,基本可以确定为发生于上图中位置。

        上面还只是粗略的判断,并没有还原出调用链中所有的方法调用过程。。文章来源地址https://www.toymoban.com/news/detail-742967.html

到了这里,关于浅谈 Android Tombstone(墓碑日志)分析步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android adb命令logcat日志分析

    logcat 是 android 中的一个命令行工具,可以用于得到程序的log信息。下面介绍 adb logcat 中的详细参数命令以及如何才能高效的打印日志,或者把日志保存到我们指定的位置。 可以输入 adb logcat --help ,查看一下一些简单的数据格式: 输出结果: 选项 描述 举例 -s 输出指定 tag

    2024年04月12日
    浏览(46)
  • Android进阶宝典 —如何通过ANR日志分析问题原因

    当系统发生ANR时,会主动dump trace日志并保存在data/anr/trace.txt文件夹下,我们在拿到anr日志之后,就可以着手分析日志;或者可以通过bugreport命令来拉取日志,具体命令如下: 当然我们在解读日志的时候,肯定是需要一些去查询,判断到底是哪种类型的问题导致了ANR。

    2024年02月05日
    浏览(48)
  • 浅谈 Android Binder 监控方案

    在 Android 应用开发中,Binder 可以说是使用最为普遍的 IPC 机制了。我们考虑监控 Binder 这一 IPC 机制,一般是出于以下两个目的: 卡顿优化:IPC 流程完整链路较长,且依赖于其他进程,耗时不可控,而 Binder 调用本身通常又是以 RPC 形式对外提供能力的,使得我们在使用时更容

    2024年02月11日
    浏览(73)
  • 使用IDA查看汇编代码,结合安卓系统生成的Tombstone文件,分析安卓app程序崩溃问题

    目录 1、IDA工具介绍 2、产品及问题场景描述 3、查看Tombstone文件

    2024年02月13日
    浏览(49)
  • 基于Filebeat、Kafka搭建ELK日志分析平台详细步骤

    写在前头:公司一直没有搭建一个支持实时查询日志的平台,平常看日志都得去服务器下载,大大降低开发效率,前段时间有大佬同事搭建了一款日志平台,支持sit,uat等各个环境的日志实时查询,大大提高bug定位速度。因对其感兴趣特向大佬请教,学习记录下搭建流程。 选

    2024年02月06日
    浏览(53)
  • Android问题笔记 - Android Studio日志乱码原因与解决

    专栏分享 点击跳转=Unity3D特效百例 点击跳转=案例项目实战源码 点击跳转=游戏脚本-辅助自动化 点击跳转=Android控件全解手册 点击跳转=Scratch编程案例 点击跳转=软考全系列 众所周知,人生是一个漫长的流程,不断 克服困难 ,不断反思前进的过程。在这个过程中会产生很多对

    2024年02月03日
    浏览(57)
  • Android开发 我的开源Android Log “日志狗”LogDog

    目录 一、简介 二、LogDog的优点 1、打印的格式 2、日志信息 3、LogDog的使用便利 4、参数优化 5、日志文件输出 6、日志文件的内容加密 三、依赖使用LogDog 1、添加仓库 2、添加依赖 四、使用说明 1、初始化 2、配置说明 3、如何使用和参数说明 LogDog 是一个开源的 Java 日志框架,

    2024年02月04日
    浏览(46)
  • 大数据综合项目--网站流量日志数据分析系统(详细步骤和代码)

    提示:这里简述我使用的版本情况: ubuntu16.04 hbase1.1.5 hive1.2.1 sqoop1.4.6 flume1.7.0 项目所使用的参考文档和代码资源和部分数据 网盘链接:链接:https://pan.baidu.com/s/1TIKHMBmEFPiOv48pxBKn2w 提取码:0830 为更好的理解项目架构,对项目使用的一些服务补充一些基本概述: 什么是Sqoop

    2023年04月08日
    浏览(47)
  • Android崩溃日志获取方式

    在日常测试安卓的app时,经常会遇到崩溃问题,于是经常需要获取崩溃日志。 一、通过adb logcat获取 二、通过Android Studio 三、通过adb shell dumpsys dropbox命令获取 四、获取ANR日志​​​​​​​ 常见异常​​​​​​​ 欢迎关注我的公众号【测试开发备忘录】,一起沟通交流~

    2024年02月11日
    浏览(48)
  • Android日志获取与解析

    Android developers🔗 设备 1、启用开发者选项(连续点击设备版本号 2、点击bug报告(不同系统稍有差异 3、选择所需bug报告类型,点击报告 4、通知栏会有完成提示,点击可分享 5、文件管理中可找到报告文件 模拟器 “Extended controls”窗口中的 File a bug 功能: 1、点击模拟器面板

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包