android 如何分析应用的内存(四)
接上文
在介绍细节部分时,先介绍了各种工具的使用,而这些工具,大部分都用来调试,诸如:特定内存点,堆栈,寄存器,变量值等的内容。而对于堆中分配的对象还没有进一步介绍。
在介绍堆中分配之前,native部分的工具篇还未完成。
接下来是lldb的工具篇的GUI部分。分成两部分:
- vscode 的LLDB
- as的LLDB
vscode的LLDB
第一步:在插件中心搜索并安装CodeLLDB
第二步:配置lldb-server
按照上一篇文章中关于lldb-server的介绍,配置lldb-server。
- 找到lldb-server并push进android设备
- 运行如下命令
./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" }
第九步:设置断点
- 打开源码文件。可以使用iamge lookup -v -n “函数名”。
在调试控制台中,按住command 并点击源文件,即可打开对应的源文件。 - 在源文件的左侧,点一下,即可设置行断点
- 点击继续按钮,运行程序到下一个断点
第十步:查看堆栈,查看变量,以及单步调试
统统见下图。已经是图形界面了,所以废话就不多说了,大家应该看得懂。
下面是一些常见的使用方法:
-
如何修改变量的值。
直接双击变量,即可进行修改,修改完成之后,会出现不同的颜色表示,如下:
-
如何添加监视
在监视栏,选择加号,然后输入对应的变量名。
-
如何添加条件断点
将光标移动到需要添加断点的行,然后鼠标右键,选择条件断点。如下
-
如何查看特定地址
在调试控制台中,使用命令行工具memroy进行查看,见上一篇文章。
vscode LLDB的及时调试
同gdb一样,使用相同的技术,停留在适当的位置,然后等待lldb的连接。详细使用,见gdb篇章
vscode LLDB查看corefile
同样,可以用LLDB查看core file。
为了达到这个目的,我们重新创建一个调试配置,如下。
然后按照下面的步骤点击,想要调试对象
然后进入调试,可以看到如下的界面
上面的coredump和对应的so库,是我从ubuntu电脑中拷贝过来的。
一样可以非常轻松的进行分析。
当然,如果你对某个源文件非常感兴趣,依然可以设置target.source-map然后,进行查看。
但考虑到AOSP的源码量极其庞大,这种情况最好,只在本机中进行。
综上:
- 寄存器查看,可以在变量一栏中进行
- 调用栈查看,可以在调用堆栈中进行
- 变量查看,可以在变量一栏中进行
- 任意地址,可以在调试控制台中进行
- 若还有其他在图形工具中未发现的,可以通过命令来解决。
下一篇 as的LLDB