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

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

接上文

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

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

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

  1. vscode 的LLDB
  2. as的LLDB

vscode的LLDB

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

android 如何分析应用的内存(四)_第1张图片

第二步:配置lldb-server

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

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

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

android 如何分析应用的内存(四)_第2张图片

第四步:添加lldb配置

android 如何分析应用的内存(四)_第3张图片
android 如何分析应用的内存(四)_第4张图片

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

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

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

android 如何分析应用的内存(四)_第5张图片

第七步:打开调试控制台,并进行调试
android 如何分析应用的内存(四)_第6张图片

android 如何分析应用的内存(四)_第7张图片

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

第八步:添加源码路径。

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

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

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

第九步:设置断点

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

android 如何分析应用的内存(四)_第8张图片

  1. 点击继续按钮,运行程序到下一个断点
    android 如何分析应用的内存(四)_第9张图片

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

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

  • 如何修改变量的值。
    直接双击变量,即可进行修改,修改完成之后,会出现不同的颜色表示,如下:
    android 如何分析应用的内存(四)_第10张图片

  • 如何添加监视
    在监视栏,选择加号,然后输入对应的变量名。
    android 如何分析应用的内存(四)_第11张图片

  • 如何添加条件断点
    将光标移动到需要添加断点的行,然后鼠标右键,选择条件断点。如下

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

vscode LLDB的及时调试

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

vscode LLDB查看corefile

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

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

android 如何分析应用的内存(四)_第12张图片

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

android 如何分析应用的内存(四)_第13张图片

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

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

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

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

综上:

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

下一篇 as的LLDB

你可能感兴趣的:(android,内存分析,vscode,lldb,lldb,gui,android,lldb,条件中断,lldb调试)