winscope怎么实现user版本上导出方案设计探讨-千里马android framework车载车机手机系统开发

Android日志实战——Bugreport日志分析(十三) bugreport日志是Android系统中一种包含详细系统信息和错误报告的日志文件,用于故障排查和问题分析。当用户遇到问题或应用程序发生崩溃时,可以生成bugreport日志以便开发人员进行分析和修复。:包括Android设备型号、操作系统版本、内核版本等系统信息,以及设备硬件配置和软件的详细信息。:列出所有正在运行的进程和线程的信息,包括进程ID、线程ID和其相关的状态。:包括系统日志(logcat)和事件日志,记录各个组件的运行状态、错误消息和警告信息。 阅读详情

背景

在马哥给讲解怎么用winscope来分析各种闪黑,黑屏等问题后,很多买课的同学都开始使用这个工具用于实际公司的项目了,但是很多同学又开始发现有一个问题,那就发现在user版本的手机设备上发现无法抓取相关的winscope,哪怕可以抓取也发现没办法导出来分析。这个问题在群里求助马哥,这边今天就给出相关的一些解决方案。
相关winscope深入使用解决闪黑等请看我的b站视频或者付费视频,可以直接看视频联系我
https://www.bilibili.com/video/BV14M411M7Pu/

1、user手机上网页获取winscope失败

winscope在user手机上的效果如下:

在这里插入图片描述可以看出一直是显示个error,但是具体是啥原因error呢?
从服务端的python程序输出日日志看看:
在这里插入图片描述

明显看到其实服务端也只是去执行相关的adb shell命令,只不过这个命令需要有su root这样高级别的权限。自然在user手机上是没有的

2、手机上可以抓取,但是无权限获取文件

快捷按钮可以去setting中放开
在这里插入图片描述

抓取完成后有相关的trace文件:
在这里插入图片描述

可以看到trace文件被导出到了 data/misc/wmtrace文件夹,那么尝试取出
发现有如下权限问题
在这里插入图片描述

可以看出这个wmtrace文件夹压根没有权限哈,自然无法取出

3、尝试探索解决办法

使用bugreoport命令:

test@test:~$ adb bugreport
/data/user_de/0/com.android.shell/files/bugreports/bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-12-21-13.zip: 1 file pulled. 27.7 MB/s (11790205 bytes in 0.406s)
test@test:~$ adb pull /data/user_de/0/com.android.shell/files/bugreports/bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-12-21-13.zip 
/data/user_de/0/com.android.shell/files/bugreports/bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-12-21-13.zip: 1 file pulled. 27.7 MB/s (11790205 bytes in 0.406s)

看看这个bugreport命令导出的相关文件:
在这里插入图片描述

发现FS文件夹下面有个data的文件夹,还有misc,因为本身misc根本adb shell是没有权限可以查看的,看着是不是很有希望。。
在这里插入图片描述
但是情况却如下:
在这里插入图片描述
只有recovery相关,没有看到wmtrace相关文件夹

但是明明就是/data/misc/wmtrace路径,为啥没有导出呢?
需要知道这个原因就必须要看源码了
首先需要了解点bugreport其实本质上也最多只能有shell权限,因为也属于adb shell拉起的进程,
但是为啥它可以导出data/misc/下面相关文件夹

为了解密这个我们可以来看看相关源码
frameworks/native/cmds/bugreport/bugreport.cpp

int main() {
    fprintf(stderr,
            "=============================================================================\n");
    fprintf(stderr, "WARNING: Flat (text file, non-zipped) bugreports are deprecated.\n");
    fprintf(stderr, "WARNING: Please generate zipped bugreports instead.\n");
    fprintf(stderr, "WARNING: On the host use: adb bugreport filename.zip\n");
    fprintf(stderr, "WARNING: On the device use: bugreportz\n");
    fprintf(stderr, "WARNING: bugreportz will output the filename to use with adb pull.\n");
    fprintf(stderr,
            "=============================================================================\n\n\n");

    return 0;
}

可以看出的这里其实bugreport已经是一个空壳了,真正还是bugreportz在起作用
看看bugreportz的相关命令:
frameworks/native/cmds/bugreportz/main.cpp

int main(int argc, char* argv[]) {
  //省略

    // TODO: code below was copy-and-pasted from bugreport.cpp (except by the
    // timeout value);
    // should be reused instead.

    // Start the dumpstatez service.
    //启动相关的 dumpstate服务
    if (stream_data) {
        property_set("ctl.start", "dumpstate");
    } else {
        property_set("ctl.start", "dumpstatez");
    }

    // Socket will not be available until service starts.
    int s = -1;
    for (int i = 0; i < 20; i++) {
    //与dumpstate进行本地socket跨进程通讯
            s = socket_local_client("dumpstate", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
        if (s >= 0) break;
        // Try again in 1 second.
        sleep(1);
    }


    int ret;
    //socket接受相关的数据进行处理
    if (stream_data) {
        ret = bugreportz_stream(s);
    } else {
        ret = bugreportz(s, show_progress);
    }
    return ret;
}

总结如下图所示:
在这里插入图片描述

验证方式:

在执行bugreport命令时候:

test@test:~/aosp/frameworks/native/cmds$ adb bugreport
[  5%] generating bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-13-02-19.zip

开另一个在终端进行adb shell查看一下阿dumpstate服务是啥权限:

crosshatch:/ $ ps -A | grep dump                                                                        
root         16137     1 10878140  5172 0                   0 S dumpstate

明显看到是一个root权限的进程

4、原因寻找及解决办法

上面已经分析了bugreport的原理,实际是借助dumpstate来实现获取高权限root的,那么问题来了,为啥wmtrace相关文件夹呢?这个问题就得看dumpstate相关源码了:

frameworks/native/cmds/dumpstate/dumpstate.cpp
看到了如下的代码:


#define PSTORE_LAST_KMSG "/sys/fs/pstore/console-ramoops"
#define ALT_PSTORE_LAST_KMSG "/sys/fs/pstore/console-ramoops-0"
#define BLK_DEV_SYS_DIR "/sys/block"

#define RECOVERY_DIR "/cache/recovery"
#define RECOVERY_DATA_DIR "/data/misc/recovery"
#define UPDATE_ENGINE_LOG_DIR "/data/misc/update_engine_log"
#define LOGPERSIST_DATA_DIR "/data/misc/logd"
#define PREREBOOT_DATA_DIR "/data/misc/prereboot"
#define PROFILE_DATA_DIR_CUR "/data/misc/profiles/cur"
#define PROFILE_DATA_DIR_REF "/data/misc/profiles/ref"
#define XFRM_STAT_PROC_FILE "/proc/net/xfrm_stat"
#define WLUTIL "/vendor/xbin/wlutil"
#define WMTRACE_DATA_DIR "/data/misc/wmtrace"
#define OTA_METADATA_DIR "/metadata/ota"
#define SNAPSHOTCTL_LOG_DIR "/data/misc/snapshotctl_log"
#define LINKERCONFIG_DIR "/linkerconfig"
#define PACKAGE_DEX_USE_LIST "/data/system/package-dex-usage.list"
#define SYSTEM_TRACE_SNAPSHOT "/data/misc/perfetto-traces/bugreport/systrace.pftrace"
#define CGROUPFS_DIR "/sys/fs/cgroup"

可以看到有列出一个个的data相关目录,有RECOVERY_DATA_DIR和WMTRACE_DATA_DIR,这里重点看看WMTRACE_DATA_DIR为啥没有被导出看看是否有相关的限制条件:

看到了如下的代码,这里有一个条件就是!PropertiesHelper::IsUserBuild()
即只有在非user手机才可以导出WMTRACE_DATA_DIR目录


    /* Add window and surface trace files. */
    if (!PropertiesHelper::IsUserBuild()) {
        ds.AddDir(WMTRACE_DATA_DIR, false);
    }

修改方案探索:
1、直接删除 if (!PropertiesHelper::IsUserBuild()) 条件(比较暴力不安全)

   //if (!PropertiesHelper::IsUserBuild()) {
        ds.AddDir(WMTRACE_DATA_DIR, false);
  //  }

2、可以加一个或条件,加入自己的暗门(建议这种),比如自己也搞一个prop,可以通过adb shell改变的prop

   if (!PropertiesHelper::IsUserBuild() || isEnableProp()) {
        ds.AddDir(WMTRACE_DATA_DIR, false);
    }
CCS配置MSPM0G3507(七) 编码器(TIMER-QEI) 1.选择时钟源 BUSCLK2.时钟分频配置为1分频3.分频系数配置为14.若勾选 Start ,则生成程序后会自动开启定时器的计数,否则需手动在程序中开启5.Load Value 设置为65535。 阅读详情

相关推荐

NVIDIA DGX Spark (Ubuntu 24.04) 部署Isaac Sim与Isaac Lab:二进制安装与ROS2集成实战

本文详细介绍了在NVIDIA DGX Spark工作站(Ubuntu 24.04系统)上,通过预编译二进制包稳定部署Isaac Sim与Isaac Lab的完整实战流程。文章重点剖析了二进制安装相较于源码编译和pip安装的优势,有效规避了CUDA、PyTorch等关键组件的版本冲突陷阱,并逐步指导完成环境配置、Isaac Lab集成、Conda环境管理以及ROS2 Jazzy的集成,最终构建出完整的机器人仿真与强化学习开发平台。

kite3的博客 396

adb bugreport 命令报错 warning:flat bugreports are deprecated, use adb bugreport <zip_file> instead

adb bugreport 命令无法使用,报错信息为 warning:flat bugreports are deprecated, use adb bugreport instead

qq_43061708的博客 2603

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

Android bugreport 分析方法

Android bugreport是一种用于收集和诊断Android设备上的问题的工具。当用户在Android设备上遇到问题或错误时,bugreport可以捕获与设备状态、系统日志、应用程序信息和其他相关信息有关的详细数据,以帮助开发者分析和解决问题。

特立独行的博客 4678

IC 笔试真题之吾见——华为实习(1)

前言 今天(2022 04 07)刚建立了一个专栏《IC真题之吾见》,准备记录一些IC真题的见解,为以后找工作做一点准备。 刷题绝不是目的,以题代练,以题代学。 题目来自师兄申请 华为实习“设计”岗位 的笔试真题。 见解大部分来自自己学习的理解,也有部分超纲知识是网络检索得到,希望可以多多在评论区留言交流,共同进步! 有问题的地方也希望可以直接批评指正! 后面也会同步更新此专栏! 1、下列有关时序分析的描述正确的是() A. recovery时间,是指异步控制信号在有效时钟沿到达之后必须保持

记录所学,分享知识,结识挚友 8637

18、Excel VBA编程:自定义函数创建与代码调试全攻略

本文详细介绍了Excel VBA中自定义函数的创建方法,以获取单元格注释为例演示了完整开发流程,并深入讲解了代码调试的重要性与核心工具。内容涵盖三种主要错误类型及其应对策略,系统介绍了调试工具栏、断点、逐行执行、Locals窗口、Immediate窗口等实用功能。通过综合案例展示了如何运用调试技术解决实际问题,并总结了提前规划、逐步测试、日志记录等最佳实践,帮助读者提升VBA编程效率与代码质量。

life6的博客 100

【Android12】Bugreport实现原理

Android Bugreport是一个用于记录和收集 Android设备上系统信息、日志和调试信息的工具。系统发生某些问题时,可以通过bugreport把系统当前时刻点(运行BugRepot的时刻)的系统相关的状态和信息都抓到一个zip中。通过bugreport可以帮忙开发人员分析和解决问题。Bugreport其实就是一系列的信息的汇总,包括日志、内存状态、进程信息、崩溃信息、服务状态等等。用一个大而近乎全的现场,来帮忙更好的分析问题。

林多 4526

JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表

本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。

木头 660

android bugreport分析,Bugreport日志分析

一、Bugreport文章Bugreport源码篇(一)从源码角度阐释了Bugreport,那么本文则是从实战角度来说说,如何看懂bugreport,对于通过bugreport获取到内容往往非常长,这里简单划分为19部分,先整体上简单说说每部分log的title信息。1. 系统build相关信息系统build信息:dumpstate: dateBuild: getprop ro.build.dis...

weixin_39638708的博客 4319

基于轻量化网络的干扰信号智能识别算法

针对干扰信号识别时卷积神经网络模型体积大、训练周期长、对硬件存储和计算要求高等问题,本 文提出了一种基于改进轻量级网络模型 SqueezeNet 的干扰信号智能识别算法。该方法首先利用距离多普勒 (Range‑Doppler,RD)处理获得目标及干扰信号的RD图像,接着采用滑窗变换、归一化等技术对RD图像进行重 塑;然后采用基于 RD 信息尺寸的隐层和通道剪枝措施对 SqueezeNet 网络进行改进,缩小了模型尺寸和存储空 间;最后利用不同参数的测试样本拓展网络模型的泛化性能。

qq_43416206的博客 545

OpenClaw 开机自启配置:Windows/macOS/Linux 全平台技术指南

OpenClaw 开机自启全平台配置指南 本文提供了在Windows、macOS和Linux系统上配置OpenClaw开机自启的完整技术方案。主要内容包括: Windows配置:提供三种方法(Windows服务、任务计划程序、启动文件夹),详细说明服务脚本创建、服务注册和测试流程 macOS配置:使用LaunchAgent实现开机自启,包含配置文件创建和加载方法 Linux配置:通过systemd服务实现,包括服务单元文件创建和启用步骤 系统要求:明确硬件(64位CPU/4GB内存)和软件(各平台操作系统版

一键难忘的博客 2993

android bugreport 分析

android bugreport 分析 Get Log from Android System adb bugreport > bugreport.txt copy bugreport to the current directory. bugreport里面包含了各种log信息,大部分log也可以通过直接运行相关的程序来直接获得. 步骤如下: 1.adb shell 2.进入相

halazi100 1821

YOLOv11的物理信息神经网络(PINN):引入物理规律约束目标运动预测

本文介绍了YOLOv11目标检测与PINN物理信息神经网络的融合技术。YOLOv11采用增强特征提取和参数优化架构,在保持实时性的同时提升检测精度。PINN通过将物理方程嵌入损失函数,实现数据高效学习。两者的结合可显著提升运动预测准确性和遮挡处理鲁棒性。文章详细阐述了环境配置、YOLOv11模型验证方法,并提供了基础PINN框架代码实现,展示了物理约束如何通过自动微分整合到神经网络中。该融合技术适用于自动驾驶、无人机导航等需要物理规律建模的视觉感知场景。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 423

bugreport 源码篇

一、概述 通过adb命令可获取bugrepport信息,并输出到文件当前路径的bugreport.txt文件: adb bugreport > bugreport.txt 对于Android系统调试分析,bugreport信息量非常之大,几乎涵盖整个系统各个层面内容,对于分析BUG是一大利器,本文先从从源码角度来分析一下Bugreport的实现原理。 二、原理分析 Androi

feitian_666的博客 5490

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android Bugreport实现原理深入分析

然后在RunDumpsysCritical函数中,通过ServiceManager获取当前系统的Service,并调用Service的dump,将Service的dump信息输出到bugreport-*.tmp文件中。最后在FinalizeFile函数中,将临时文件Bugreport-.tmp,copy到zip中,并命名为Bugreport-.zip。在PrintHeader函数中,将bugreport-.txt中的头部信息输入到标准输出中,而标准输出已经重定向到了bugreport-.tmp文件中。

chinaherolts2008的博客 1352

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

log分析

log分析用于定位一些无法断点调试的一些疑难杂症。所以需要熟悉bugreport到底有哪些内容,哪些模块都打印log。读完下文你会有不一样的认识。基于Android O源码 命令: adb bugreport &gt; bugreport.txt 源码: #include &lt;errno.h&gt; #include &lt;stdio.h&gt; #include &lt;sys/sock...

我叫王菜鸟 3285

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WinScope实现录制视频与是Timeline时间轴同步设置方法-千里马framework车载手机系统开发实战

用到winscope工具,提出一个疑问,就是google官网说的有录屏可以结合起来一起看

learnframework的博客 1869

Winscope中抓取Transaction相关的原理剖析

首先这个service call就是直接调用到SurfaceFlinger这个service的onTransact方法,1041代表是code,i32代表是data的int类型,1和0代表就是值。那么选着Transaction选项后抓取Winscope,看看winscope_proxy.py程序的相关输出,看看有没有线索可以查到是如何获取系统的相关Transaction数据。在使用Winscope过程经常会有如下的一些选项供我们进行选择,不同的选项最后就会展示不同的数据项出来。具体这些数据是哪里来的呢?

learnframework的博客 1472

Winscope重要干货知识点RelativeLayer相关的查看方式

实际查看明显发现SurfaceView位于Activity图层下面,和上面winscope的看着是有冲突的,那么这个到底是winscope不准确有问题,还是我们有啥知识点遗漏呢?这个部分就是相当于图层顺序的核心哈,其实winscope就已经有针对这个相对图层有明显的标识。这里winscope明显可以看到SurfaceView图层上相比其他图层还有一写标识上的差异,多了一些RelZ,和RelZParent这样的标识。Background for SurfaceView其实是位于Activity图层的下面。

learnframework的博客 1009

android bugreport 模块源码分析

【代码】android bugreport 模块源码分析。

fukaiqiang 245

Lineageos 22.1(Android 15) Winscope编译使用

winsocpe对于一些dump的分析还是很有用的,但是Lienageos编译之后的winscope用不了,很坑。记录一下使用的时候遇到的问题。首先我们进入lineageos/development/tools/winscope/ 目录下,默认已经安装好了nodejs环境。编译命令 这里需要开vpn或者切换一下源,不然可能失败。 然后直接提示require xxx version什么的,我们需要更新一下nodejs版本,我这里提示需要16.10.0 接下来执行 2.编译问题 我这里可能vpn还是不太好,执行

JabamiYu的博客 1524

安卓闪黑黑屏分析工具:aosp14/15版本Winscope之时间轴部分使用剖析

本文介绍了Winscope工具的时间轴导航功能,包括迷你时间轴和展开时间轴两种视图。迷你时间轴支持时间戳导航、过滤和缩放功能,可通过按钮、快捷键或鼠标操作实现精确浏览。展开时间轴提供更全面的跟踪记录视图。文章还区分了Trace(连续快照)和Dump(单次快照)的概念,并详细说明了各种缩放和导航操作方式,包括WASD快捷键、鼠标滚轮、滑块调整等交互方法,帮助用户高效分析系统跟踪数据。

liaosongmao1的专栏 67

Android Log Analysis

<br />---------------------------------------------------<br />本文原创,转载请注明出处,如有错误之处欢迎指出<br />---------------------------------------------------Get Log from Android System<br />adb bugreport > bugreport.txt<br />copy bugreport to the current directory.<br /

Thread 2143

Bugreport原理

文章目录1. bugreport2. bugreportz3. adb bugreport4. dumpstate1. bugreport2. bugreportz3. adb bugreport4. dumpstate 1. bugreport 编译到/system/bin/bugreport @frameworks/native/cmds/bugreport/Android.bp cc_binary { name: "bugreport", srcs: ["bugreport.cpp"]

wd229047557的博客 3173

Android adb bugreport工具分析和使用

bugreport是什么,怎么用?Android系统想要成为一个功能完备,生态繁荣的操作系统,那就必须提供完整的应用开发环境。而在应用开发中,app程序的调试分析是日常生产中进程会进行的工作。Android为了方便开发人员分析整个系统平台和某个app在运行一段时间之内的所有信息,专门开发了bugreport工具。这个工具使用起来十分简单,只要在终端执行(linux或者win):adb bugrepo

Android Fans 8万+
上一篇: systemserver的inputdispatcher直接产生CANCEL事件原理分析-讨厌的android触摸面试题
下一篇: android studio platform使用体验分享(as无法跳转c/c++等native源码的福音,强烈推荐)
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值