oneplus3t-android9-frameworks-debug-gdb

build-oneplus3t/debug-info.md

调试信息
-1. 修改备忘
  1. framework/base/core/jni/Android.bp 的 cflags 、 cppflags 增加-g3:

https://gitlab.com/LineageOS-z/android_frameworks_base/-/commit/56dae322b094cc5f1308786f7c9210435622af66

  1. external/skia/Android.bp 的 cflags 、 cppflags 增加-g3:

https://gitlab.com/LineageOS-z/android_external_skia/-/commit/053d06f67bf2496fe85c958ec56a3f7ad778648e

0. libandroid_runtime.so 原样

https://gitee.com/imagg/android_framework/blob/master/oneplus3/doc/libandroid_runtime.so-origin.md

1. 修改编译选项 增加调试信息

/app4/lineage16_oneplus3t/frameworks/base/core/jni/Android.bp : https://gitlab.com/LineageOS-z/android_frameworks_base/-/commit/5b55f6a66a6f898e73f26026cca0420729b1b37b

或者 将 lineage_oneplus3-userdebug 改为 lineage_oneplus3-eng

2. gdb调试

TODO : frida 跟踪函数 skia/mapPoints , 在函数返回时 打印第二个参数的数值

android端(gdbServer): /system/bin/gdbserver64 remote:9999 --attach $(pidof com.tencent.mobileqq) (或 com.example.myapplication)

PC端(gdbClient):

adb forward tcp:9999  tcp:9999
/app4/lineage16_oneplus3t/prebuilts/gdb/linux-x86/bin/gdb  /app4/lineage16_oneplus3t/out/target/product/oneplus3/symbols/system/bin/app_process64
(gdb) directory /app4/lineage16_oneplus3t/
(gdb) show debug-file-directory
(gdb) set solib-absolute-prefix /app4/lineage16_oneplus3t/out/target/product/oneplus3/symbols/
(gdb) set solib-search-path /app4/lineage16_oneplus3t/out/target/product/oneplus3/symbols/
(gdb) target remote localhost:9999
#此时会加载大量x.so.debug调试符号文件, 最终停在:
#__epoll_pwait () at bionic/libc/arch-arm64/syscalls/__epoll_pwait.S:9
#9	    cmn     x0, #(MAX_ERRNO + 1)
(gdb) handle SIGQUIT nostop
(gdb) handle SIG35 nostop
(gdb) break android::CanvasJNI::drawTextString
(gdb) continue
#在android手机上 按两次 屏幕底下左边键三条线,
#   则 再次回到 本应用com.example.myapplication  且 引发 界面重新绘制, 从而触发该drawTextString处断点
#Thread 1 "e.myapplication" hit Breakpoint 1, android::CanvasJNI::drawTextString (env=0x7899ee0460, canvasHandle=517480295424, text=0x7fc5810988, start=0, end=14, x=0, y=56, bidiFlags=2, 
#    paintHandle=517978350304) at frameworks/base/core/jni/android_graphics_Canvas.cpp:585
#585	    const jchar* jchars = env->GetStringChars(text, NULL);#当停止在函数 android::CanvasJNI::log_abs_x_y_ZHelper 内时,执行以下gdb调试语句
set $skPoint=malloc(sizeof(SkPoint))
set  ((SkPoint*)($skPoint))->fX=4
call skMatrix.mapPoints ((SkPoint*)$skPoint,1)
print *( (SkPoint*)($skPoint))
#为啥 结果没变? {fX = 4, fY = 0}  

屏幕底下左边键三条线 == 查看当前打开的应用们

若android手机上该应用(com.example.myapplication)窗口中间显示小弹窗Messaging keeps stopping : App info , Close app , 请在小窗口外点击一下 以忽略该小弹窗

参考1: https://blog.csdn.net/zhuyong006/article/details/83789600

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

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

相关文章

MySQL扩展varchar字段长度能否Online DDL

目录 问题场景 Online DDL 简介 场景复现 DBdoctor快速识别 Online DDL 总结 问题场景 在MySQL数据库中,DDL变更可以通过两种算法实现:Copy算法和In-Place算法。Copy算法会复制整个表,这可能导致长时间的写入阻塞,从而严重影…

【WPF】Prism学习(九)

Prism Dependency Injection 1.Container Locator 1.1. Container Locator的引入: Container Locator是在Prism 8.0版本中新引入的一个特性。它的目的是为了帮助Prism框架摆脱对CommonServiceLocator的依赖,并解决一些必须回退到ServiceLocator模式的内…

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会,3C产品(涵盖计算机类、通信类和消费类电子产品)已成为我们日常生活中不可或缺的重要元素。与此同时,这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

GIT 入门详解指南

前言: 注:本博客仅用于记录本人学习过程中对git的理解,仅供学习参考,如有异议请自行查资料求证 安装 使用git之前必须完成git的安装,Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行 git 安装教程 基本…

【数据结构】用四个例子来理解动态规划算法

1. 动态规划 动态规划(Dynamic Programming, DP)是一种通过将复杂问题分解为更小的子问题来求解的算法设计思想,一般用于求解具有最优子结构和重叠子问题性质的问题。动态规划的核心在于:(1)最优子结构--问…

前端两大利器:Vue与TypeScript的渊源

Vue 在前端领域占据着重要地位,是最受欢迎的前端框架之一。它被广泛应用于各种类型的 Web 应用开发,从简单的小型项目,如个人博客、公司宣传网站等,到复杂的大型企业级应用,如电商平台、金融系统等。例如,许…

【Python】使用Windows任务计划程序定时运行Python脚本!

在搭建了一个python 文件以后,如果我们想每天一次或者多次运行这个文件,或者想要一天运行多个python 文件,推荐可以使用: Win的【任务计划程序】 创建【批处理文件(.bat)】运行Python脚本。 我们可以在Wind…

分布式数据库中间件可以用在哪些场景呢

在数字化转型的浪潮中,企业面临着海量数据的存储、管理和分析挑战。华为云分布式数据库中间件(DDM)作为一款高效的数据管理解决方案,致力于帮助企业在多个场景中实现数据的高效管理和应用,提升业务效率和用户体验。九河…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介: 最近发现了一个不错的框架 Photino.Net 一份代码运行,三个平台 windows max linux ,其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…

NAT网络地址转换——Easy IP

NAT网络地址转换 Tip: EasylP没有地址池的概念,使用接口地址作为NAT转换的公有地址。EasylP适用于不具备固定公网IP地址的场景:如通过DHCP, PPPOE拨号获取地址的私有网络出口,可以直接使用获取到的动态地址进行转换。 本次实验模拟nat协议配置 AR1配置如下&…

Redis五大基本类型——List列表命令详解(命令用法详解+思维导图详解)

目录 一、List列表类型介绍 二、常见命令 1、LPUSH 2、LPUSHX 3、RPUSH 4、RPUSHX 5、LRANGE 6、LPOP 7、RPOP 8、LREM 9、LSET 10、LINDEX 11、LINSERT 12、LLEN 13、阻塞版本命令 BLPOP BRPOP 三、命令小结 相关内容: Redis五大基本类型——Ha…

单细胞转录组学在植物系统和合成生物学中的应用进展-文献精读83

Advances in the Application of Single-Cell Transcriptomics in Plant Systems and Synthetic Biology 单细胞转录组学在植物系统和合成生物学中的应用进展 最佳实践:教程-文献精读80 摘要 植物是由多种细胞类型组成的复杂系统,其结构呈现出分层的组…

【设计模式】如何用C++实现适配器模式

【设计模式】如何用C实现适配器模式 一、问题背景 用到过很多次适配器模式,一直不理解为什么用这种模式,好像这个模式天生就该如此使用。 实际上,我们很多的理念都源于一些简朴的思想,这些思想不一定高深,但是在保证…

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序(InsertSort)1.1 核心思路1.2 实现代码 2.选择排序(SelectSort)2.1 核心思路2.2 实现代码 3.冒泡排序(BubbleSort)3.1 核心思路3.2 实现代码 4.希尔排序(ShellSort&…

《Django 5 By Example》阅读笔记:p679-p765

《Django 5 By Example》学习第10天,p679-p765总结,总计87页。 一、技术总结 1.channel 书里通过聊天软件功能演示Django中channel以及异步编程的应用,本人对这块不是很熟悉,不做评价。 2.deployment(部署) services:db:imag…

kali搭建pikachu靶场

前言: 总所周知搭个网站需要有apachemysqlphp,Apache是一个开源的Web服务器软件, MySQL是一种关系型数据库管理系统(数据库),PHP是一种在服务器上执行的脚本语言 文章内容来自:【黑帽编程与攻…

C++时间复杂度与空间复杂度

一、时间复杂度(Time Complexity) 1. 概念 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。它主要关注的是算法执行基本操作的次数与输入规模之间的关系,而非具体的运行时间(因为实际运行时间会受硬件、编程语…

【软考】系统架构设计师-信息安全技术基础

信息安全核心知识点 信息安全5要素:机密性、完整性、可用性、可控性、审查性 信息安全范围:设备安全、数据安全、内容安全、行为安全 网络安全 网络安全的隐患体现在:物理安全性、软件安全漏洞、不兼容使用安全漏洞、选择合适的安全哲理 …

SQL Server Management Studio 的JDBC驱动程序和IDEA 连接

一、数据库准备 (一)启用 TCP/IP 协议 操作入口 首先,我们要找到 SQL Server 配置管理器,操作路径为:通过 “此电脑” 右键选择 “管理”,在弹出的 “计算机管理” 窗口中,找到 “服务和应用程…