android 如何分析应用的内存(四)

news2024/11/24 4:05:50

android 如何分析应用的内存(四)

接上文

在介绍细节部分时,先介绍了各种工具的使用,而这些工具,大部分都用来调试,诸如:特定内存点,堆栈,寄存器,变量值等的内容。而对于堆中分配的对象还没有进一步介绍。

在介绍堆中分配之前,native部分的工具篇还未完成。

接下来是lldb的工具篇的GUI部分。分成两部分:

  1. vscode 的LLDB
  2. as的LLDB

vscode的LLDB

第一步:在插件中心搜索并安装CodeLLDB

在这里插入图片描述

第二步:配置lldb-server

按照上一篇文章中关于lldb-server的介绍,配置lldb-server。

  1. 找到lldb-server并push进android设备
  2. 运行如下命令
./lldb-server p --listen ":5039" --server

第三步:打开vscode的调试标签

在这里插入图片描述

第四步:添加lldb配置

在这里插入图片描述
在这里插入图片描述

注意:
type:必须是lldb
request:因为是远程调试,也必须是custom
name:就是一个名字,随便取
initCommand:初始命令,主要是插件的选择和程序的运行。
各个命令的具体解释,可见上一篇文章
sourceLanguages:表示的是什么语言,可以不用填写

各个参数什么意思,以及还有哪些参数,可参见:
https://github.com/vadimcn/codelldb/blob/v1.9.2/MANUAL.md#remote-debugging

第六步:点击“运行” ->“启动调试”

在这里插入图片描述

第七步:打开调试控制台,并进行调试
在这里插入图片描述

在这里插入图片描述

从图中可以看到,调试打开成功,将会出现一个控制条,以及控制台中出现正确的输出。
这个输出,和我们在前一篇文章中提到的LLDB命令行一样。

第八步:添加源码路径。

按照前一篇文章的介绍,在调试控制台中,加入源码文件,即命令行

还可以在配置文件中,使用如下的字段:

"sourceMap": { "/build/time/source/path" : "/current/source/path" }

第九步:设置断点

  1. 打开源码文件。可以使用iamge lookup -v -n “函数名”。
    在调试控制台中,按住command 并点击源文件,即可打开对应的源文件。
  2. 在源文件的左侧,点一下,即可设置行断点

在这里插入图片描述

  1. 点击继续按钮,运行程序到下一个断点
    在这里插入图片描述

第十步:查看堆栈,查看变量,以及单步调试
统统见下图。已经是图形界面了,所以废话就不多说了,大家应该看得懂。
在这里插入图片描述

下面是一些常见的使用方法:

  • 如何修改变量的值。
    直接双击变量,即可进行修改,修改完成之后,会出现不同的颜色表示,如下:
    在这里插入图片描述

  • 如何添加监视
    在监视栏,选择加号,然后输入对应的变量名。
    在这里插入图片描述

  • 如何添加条件断点
    将光标移动到需要添加断点的行,然后鼠标右键,选择条件断点。如下
    在这里插入图片描述
    在这里插入图片描述

  • 如何查看特定地址
    在调试控制台中,使用命令行工具memroy进行查看,见上一篇文章。

vscode LLDB的及时调试

同gdb一样,使用相同的技术,停留在适当的位置,然后等待lldb的连接。详细使用,见gdb篇章

vscode LLDB查看corefile

同样,可以用LLDB查看core file。

为了达到这个目的,我们重新创建一个调试配置,如下。

在这里插入图片描述

然后按照下面的步骤点击,想要调试对象

在这里插入图片描述

然后进入调试,可以看到如下的界面

在这里插入图片描述

上面的coredump和对应的so库,是我从ubuntu电脑中拷贝过来的。
一样可以非常轻松的进行分析。

当然,如果你对某个源文件非常感兴趣,依然可以设置target.source-map然后,进行查看。

但考虑到AOSP的源码量极其庞大,这种情况最好,只在本机中进行。

综上:

  1. 寄存器查看,可以在变量一栏中进行
  2. 调用栈查看,可以在调用堆栈中进行
  3. 变量查看,可以在变量一栏中进行
  4. 任意地址,可以在调试控制台中进行
  5. 若还有其他在图形工具中未发现的,可以通过命令来解决。

下一篇 as的LLDB

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL安装流程 及 8.0与5.7区别

一、MySQL版本介绍 1、MySQL 8.0 窗口函数:MySQL 8.0版本支持窗口函数,这是数据分析工作中非常常用的一类函数。窗口函数可以让用户在单个查询中跨多个行检索数据,并在查询结果中对数据执行计算。隐藏索引:在MySQL 8.0版本中&am…

C++STL详解 string【C++】

文章目录 函数模板函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板的定义格式类模板的实例化 string 函数模板 函数模板的原理 template <typename T> //模板参数 ——类型 void Swap(T& x1, T& x2) {T tmp x1;x1 x2;x2 tmp; } int main()…

牛客网语法刷题篇(C语言) — 输出格式化

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言—语法篇》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;…

解析Linux中断子系统之中断映射

中断是当前计算机系统的基础功能&#xff0c;也是系统响应外设事件的必备桥梁。不同的架构对中断控制器有不同的设计理念&#xff0c;本文针对ARM公司提供的通用中断控制器&#xff08;GIC,Generic Interrupt Controller&#xff09;介绍在linux系统中的硬件中断号与软件中断号…

SpringBootWeb登录认证

1. 登录功能 1.1 需求 在登录界面中&#xff0c;我们可以输入用户的用户名以及密码&#xff0c;然后点击 “登录” 按钮就要请求服务器&#xff0c;服务端判断用户输入的用户名或者密码是否正确。如果正确&#xff0c;则返回成功结果&#xff0c;前端跳转至系统首页面。 1.2 …

简单聊一聊数据库驱动

数据库驱动通常是数据库厂家提供的&#xff0c;他们按照jdbc协议对自家数据库封装了一套可对外调用的API。在应用程序和数据库之间起到了桥接的作用。它是一个软件组件&#xff0c;提供了与特定数据库系统进行通信的接口和功能。 1. 数据库驱动的作用&#xff1a; 连接数据库&…

AAOS 音频动态路由

文章目录 基本概念车载音频配置文件外部的配置音频区的方式车载音频服务配置路由流程框架中获取可用输出设备配置例子测试方法相关问题 基本概念 Android 管理来自 Android 应用的声音&#xff0c;同时控制这些应用&#xff0c;并根据其声音类型将声音路由到 HAL 中的输出设备…

FastAPi上传文件报错,There was an error parsing the body

问题描述 通过postman调用fastapi编写的文件接口报错&#xff0c;如下图&#xff1a; {"detail": "There was an error parsing the body" } 问题的解决过程 postman本身的问题 postman有个work directory的概念&#xff0c;所以再使用postman上传的文…

Git常用命令submodule

Git常用命令submodule 1、需求 当程序比较大参与开发人员较多时&#xff0c;代码管理就复杂起来。代码如果全员可见&#xff0c;可以创建 share 分支维护共用代 码&#xff0c;可以创建 core 分支维护核心算法代码&#xff0c;各进程分别占一个分支&#xff0c;定期同步 sha…

如何从 OpenAI 迁移到 Azure OpenAI(保姆级教程,包含如何兼容 JS 语言版 LangChain)

Azure OpenAI 和 OpenAI 一样&#xff0c;本质都是调用 api&#xff0c;Azure OpenAI 的使用会稍微复杂一点&#xff0c;但好处就是方便付费。 创建 Azure OpenAI 资源 首先&#xff0c;先登录 Azure 账号&#xff1a;https://azure.microsoft.com/zh-cn/ 接着创建 OpenAI 资…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

MySQL(进阶篇1.0)

MySQL体系结构 1、连接层 最上层是一些客户端和连接服务&#xff0c;包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证安全接入的客户端提…

进程的通信方式有哪些?

目录 管道消息队列共享内存信号量信号套接字 管道 最初我们在学习Linux基本命令使用的时候&#xff0c;我们经常通过多个命令的组合来完成我们的需求。比如说我们想知道如何查看进程或者端口是否在使用&#xff0c;会使用下面的这条命令 netstat nlp | grep xxx 这里的"|“…

电子科技大学计算机系统结构复习笔记(四):存储系统

目录 前言 重点一览 Cache基本原理 三种映像方式 物理地址与Cache地址的映射计算 Cache块标识 Cache替换算法 Cache写策略 分离cache与一体cache Cache性能与优化 Cache性能计算 Cache性能优化 主存储器与虚拟存储器 主存储器性能优化 虚拟存储器 虚拟存储器与…

编译 ONNX 模型

本篇文章译自英文文档 Compile ONNX Models — tvm 0.13.dev0 documentation 作者是 Joshua Z. Zhang 更多 TVM 中文文档可访问 →TVM 中文站。 本文将介绍如何用 Relay 部署 ONNX 模型。 首先安装 ONNX 包&#xff0c;最便捷的方法推荐安装 protobuf 编译器&#xff1a; pi…

【资料分享】浪涌电流(Inrush Current)产生原因

1、对Inrush Current电流的直观感受 当电灯在电路中工作时&#xff0c;如果突然启动马达或者变压器时&#xff0c;会出现电灯暗一下&#xff0c;此时电灯出现暗的情况就是因为马达或者变压器启动时&#xff0c;在电路中产生较大Inrush Current&#xff0c;具体分析可以参考下图…

图解HTTP书籍学习

了解Web及网络基础 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09; Web是建立在HTTP协议上通信的 把SGML&#xff08;Standard Generalized Markup Language&#xff0c;标准通用标记语言&#xff09; HTML&#xff08;HyperText Mar…

大数据:spark任务调度,DAGscheduler,Taskscheduler

大数据&#xff1a;spark任务调度 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其s…

SpringBoot源码分析:SpringBoot自动装配(二)

一、概述 SpringBoot的启动流程入下图所示&#xff0c;它主要分为加载主启动类和解析启动类两个部分&#xff0c;我将从这两个部分分别开始介绍。 二、加载主启动类 首先点入SpringApplication.run方法 之后进入SpringApplication.prepareContext方法 之后进入SpringApplicat…

【JavaEE】简单前后端分离小项目-表白墙

plus版表白墙&#xff01;✿✿ヽ(▽)ノ✿ 文章目录 JavaEE & 简单前后端分离小项目 - 表白墙1. body格式约定 - 应用层协议2. 后端处理请求2.1 模板2.2 doGet方法2.3 doPost方法 3. 前端制作请求并解析响应3.1 原前端页面的代码3.2 刷新时发送GET请求3.3 点击发送时构造Pos…