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

        tomestone 日志:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'qti/trinket/trinket:11/RKQ1.211119.001/37:user/test-keys'
Revision: '0'
ABI: 'arm'
Timestamp: 2023-06-19 23:47:31+0800
pid: 742, tid: 32482, name: CAM_MctBus_3  >>> /vendor/bin/hw/android.hardware.camera.provider@2.4-service <<<
uid: 1047
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xf1c0b000r0  f1c0b000  r1  f0bc2e30  r2  a3e7e031  r3  00000000r4  00000030  r5  e30a2000  r6  e41c0010  r7  e41cf1e8r8  e41cf1e8  r9  e9140010  r10 f101b124  r11 e9141718ip  f10104a8  sp  e7cfbf48  lr  eed906ed  pc  eed9e7c2backtrace:#00 pc 0001a7c2  /vendor/lib/libmmcamera2_mct.so (mct_stream_process_bus_msg+1090) (BuildId: c7b8b07e3cfc6442102b77d8c5cb2c94)#01 pc 00011b07  /vendor/lib/libmmcamera2_mct.so (mct_pipeline_process_bus_msg+66) (BuildId: c7b8b07e3cfc6442102b77d8c5cb2c94)#02 pc 00015f77  /vendor/lib/libmmcamera2_mct.so (mct_bus_handler_thread_run+722) (BuildId: c7b8b07e3cfc6442102b77d8c5cb2c94)#03 pc 0008175b  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+40) (BuildId: ce538316b794b365cfbcadf267fef2dc)#04 pc 0003a3ed  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (BuildId: ce538316b794b365cfbcadf267fef2dc)

        先看 #04。

        首先,确认 #04 所对应的 libc.so 所在的位置,在 ./out/target/ 下执行命令:

/out/target$ find . -name libc.so*  

        找到 so 位置:

   ./out/target/product/qssi/symbols/apex/com.android.runtime/lib/bionic/libc.so

        接着再执行命令:

./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e ./out/target/product/qssi/symbols/apex/com.android.runtime/lib/bionic/libc.so 0003a3ed

        定位出问题方法具体位置:

         打开代码,找到方法调用链中的首个方法:

        找到首个方法位置后,再看,这个链其实不长,而且墓碑日志记录很清晰,是 /vendor/bin/hw/android.hardware.camera.provider@2.4-service 发生了问题,因此接下来直接找链中最后一个方法调用,也就是 #00。

        看#00,首先确认 libmmcamera2_mct.so 所在位置,在 ./out/target/ 下执行命令:

find . -name libmmcamera2_mct.so*

        如下图找到带符号的 so 库位置:

         即:

./out/target/product/trinket/symbols/vendor/lib/libmmcamera2_mct.so

        接着再执行命令:

./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -f -e ./out/target/product/trinket/symbols/vendor/lib/libmmcamera2_mct.so 0001a7c2

        定位出问题方法位置:

         查看文件 
~/workspace/code_v01_dev/LINUX/android/vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/mct/stream/mct_stream.c 的 4196 行:

        当前是找到了首、尾两处,但是具体的问题分析,还得再结合日志进行分析。

        结合 logd 日志,墓碑日志记录于 2023-06-19 23:47:31,logd 中最旧的日志记录的最早时间是 06-20 14:12:02.454747,所以前置操作日志已经被覆盖冲掉,无法参考 logd 日志分析问题。

        待继续分析。。

---------------------------------------------------------------------------------------------------------------------------------

        我去,上面吭哧吭哧,执行了一堆命令才找到两处代码调用。刚发现一篇博客(博客),其实可以直接使用 stack 就可以一键发现所有地方,即使找到的不全,再结合使用 addr3line 自己转一下,也就差不多就找全了。

        以上面这个 tombstone 日志为例,在 ./development/scripts 目录下执行命令:
 

// hgd_tombstone_01 :tombstone文件名字
// hgd_01_check :保存转换后的文本stack hgd_tombstone_01 > hgd_01_check

        打开转换后的 hgd_01_check 文件:

         也定位到了 4196行处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2500.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联想小新Pro16怎么重装Win10系统?联想小新Pro16重装系统Win10教程

如果您是联想小新Pro16的用户&#xff0c;并且想要重装Win10系统&#xff0c;那么您来对地方了&#xff0c;无论是出于系统崩溃、性能下降还是个人需求改变的原因&#xff0c;重新安装操作系统可以帮助您恢复电脑的正常运行和提升使用体验。以下小编将为您分享联想小新Pro16重装…

10 月发布,Ubuntu 23.10 已升级到 Linux Kernel 6.3 内核

导读Canonical 于近日宣布&#xff0c;代号为 Mantic Minotaur 的 Ubuntu 23.10 发行版本已升级基于 Linux Kernel 6.3 内核。 Canonical宣布&#xff0c;代号为 Mantic Minotaur 的 Ubuntu 23.10 发行版本已升级基于 Linux Kernel 6.3 内核。 Ubuntu 23.10 于今年 4 月下旬进入…

ISP之图像降分辨率

1、图像缩放背景 图像的放大、缩小(简称缩放)是图像处理的一种处理方法。所谓图像缩放是指图像分辨率的改变&#xff0c;它在图像显示、传输、图像分析以及动画制作、电影合成、甚至医学图像处理中都有着相当广泛的应用。比如要在1024 X 768 分辨率的显示器上全屏显示800 X 60…

Docker安全

一、Docker 容器与虚拟机的区别 1、隔离与共享 • 虚拟机通过添加 Hypervisor 层&#xff0c;虚拟出网卡、内存、CPU 等虚拟硬件&#xff0c;再在其上建立虚拟机&#xff0c;每个虚拟机都有自己的系统内核 • Docker容器则是通过隔离的方式&#xff0c;将文件系统、进程、设…

使用RabbitMQ死信队列关闭未支付的订单

一、什么是RabbitMQ死信队列 RabbitMQ死信队列&#xff08;Dead-Letter Exchange&#xff0c;简称DLX&#xff09;是一种特殊类型的交换机&#xff0c;用于处理在队列中无法被消费的消息。当消息无法被消费时&#xff0c;它会被转发到死信队列中&#xff0c;以便进一步处理。 …

云原生——Docker容器化实战

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 "Docker"一词指代了多个概念&#xff0c;包括开源…

云端安全由繁到简,亚马逊云科技护航业务创新新局面

数字化愿景与现实存在的差距困扰着诸多企业&#xff0c;但造成这种差距的一个重要因素却一直被很多管理者所忽视&#xff0c;那就是企业未能建立应有的数字安全与合规体系。应用迭代的速度加快、数据快速膨胀、企业云原生道路上遭遇的种种困境&#xff0c;与数字安全部门有限的…

大学智慧课堂系统整理

目录 一、题目类型选择器(非组件库) 1.1、效果展示 1.2、代码展示 二、题目类型选择器(Vant组件库) 2.1、效果展示 2.2、代码展示 一、题目类型选择器(非组件库) 使用vue2&#xff1a;在methods里区分单个点击和多个点击&#xff0c;在view视图区分判断题和选择题。 如下…

【微服务】springboot 通用限流方案设计与实现

目录 一、背景 二、限流概述 2.1 dubbo 服务治理模式 2.1.1 dubbo框架级限流 2.1.2 线程池设置 2.1.3 集成第三方组件 2.2 springcloud 服务治理模式 2.2.1 hystrix 2.2.2 sentinel 2.3 网关层限流 三、常用限流策略 3.1 限流常用的算法 3.1.1 令牌桶算法 3.1.2 …

chatgpt赋能python:同一行Python给两个变量赋值:如何提高编程效率?

同一行Python给两个变量赋值&#xff1a;如何提高编程效率&#xff1f; 作为Python编程方面经验丰富的工程师&#xff0c;我们都知道Python是一种非常易学易用的编程语言&#xff0c;其灵活性和高效性问题业已广为人知。然而&#xff0c;当我们在同时对多个变量进行赋值时&…

NLP学习笔记(三)

一&#xff1a;分类方法 &#xff08;一&#xff09;逻辑回归 最简单的方法就是将分类问题视为回归问题&#xff0c;采用逻辑回归计算分类的边界。 &#xff08;二&#xff09;softmax回归 softmax的前向传播过程可以分为以下三步&#xff1a; h W T x y ^ s o f t m a …

chatgpt赋能python:如何升级Python包

如何升级Python包 如果你是一名有着10年Python编程经验的工程师&#xff0c;那么你一定知道如何安装和使用Python包。但是&#xff0c;有时候你需要升级一些已经安装的包&#xff0c;以获得更好的性能和新功能。在本文中&#xff0c;我们将讨论如何升级Python包。 什么是Pyth…