android 如何分析应用的内存(五)——Android studio的LLDB

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

接上文

lldb的工具篇的GUI部分。分成两部分:

  1. vscode 的LLDB
  2. as的LLDB

接下来是as的LLDB

as的LLDB

为了进行LLDB的调试,需要对as进行配置,事实上,每一个在AS中编辑的应用,都会有一个默认配置。

我们先从手动添加配置,开始,然后再过渡到默认配置。

手动添加debug配置。

分别点击 run-》edit configurations,如下图
在这里插入图片描述

在弹出框中,点击左上角的加号,选择Android APP,并命名如下图
在这里插入图片描述

因为本文章仅调试,所以并不需要在General标签页中,指定APP启动的各种选项。General中的参数说明,见下一小节。

需要说明的是,各种debug type:

Java Only:表示只对Java进行调试
Native Only:表示只对Native进行调试,As默认使用LLDB
Detect Automaticlly:自动检测,根据你使用的语言,自动选择调试工具
Dual:表示两个调试工具都使用。

接下来就是进行debug了。Android的debug有两种方式。图标如下:
在这里插入图片描述

图标1:as重新编译并运行,然后开始调试(因为本文章,仅仅涉及调试,所以不使用它)
图标2:as将调试器,attach到一个应用程序上

点击第二个图标,弹出选项框,选择自己配置的debug选项,这里提供的例子是:piano-lldb
在这里插入图片描述

然后,就会进入调试界面。

注意:部分AS试程序可能出现下面的情况

  1. 点击图标一,出现没有可以调试的程序
  2. 点击图标二,依然没有可以调试的程序,但是有Android 手机。

解决办法:File-》invalidate caches 然后在弹出框中,点击invalidate and restart 即可。

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

因为AS的调试,大家都比较熟悉,因此,直接贴一张总图
在这里插入图片描述

as的默认配置选项

本部分仅仅对,上一小节中,提及的默认配置,做介绍性说明。

为何会有这部分说明?

因为,对于Framework 工程师而言,AS提供的功能有限,可能并不适用,所以可以使用jetbrain的相关IDE,如Intellig IDEA
和CLion。介绍AS的默认配置,可以帮组Framework工程师,理解jetbrain的配置选项。

依然按照,run-》Edit configuration,打开如下界面。
在这里插入图片描述
deploy的四种方式:

  1. default apk:即默认就是安装apk
  2. apk from app bundle:会将apks从apk中抽取出来,然后再安装
  3. custom artifact:只得是,可以自定义部署的部件,不仅仅是apk,还可以是其他的jar包,aar等等

对于debugger标签页,见下图

在这里插入图片描述

as LLDB的及时调试技术

方法同gdb里面介绍的一样,可参见gdb篇章,
android 如何分析应用的内存(二)

as LLDB加载corefile

非常之不幸,Android studio提供的配置项,并没有提供对core file的支持。但是我们可以使用它的替代产品,jetbrains的Clion。它的配置,同上面介绍的几乎完全一样。因此不再过多赘述。

至此,所有关于native内存的前三部分介绍完成,如下:

native部分

  1. 寄存器内容是什么。如pc指向何处,sp指向何处
  2. 指定地址内容是什么。如变量a对应的内容
  3. 线程堆栈内容是什么。如主线程的堆栈,UI线程的堆栈
  4. 堆区的对象有哪些。

java部分

  1. 线程堆栈有什么内容。
  2. 堆中对象分配情况

与其说是native的内存,倒不如说是native的调试。但,为了内存知识的丰富性和整体性,将这部分也划入Android的内存部分。

关于Android代码如何调试,如怎样调试AOSP的原生代码,怎么分析各种各样的崩溃,或许后面会有时间单独一个专题。

接下来就是native内存部分的重点章节了。不同的分析技术,可能需要不同的代码。

即将介绍的部分有:

  1. 手动实现,new和delete,以及malloc和freee,并统计内存分配情况
  2. 使用malloc hook
  3. 使用Malloc debug和libc回调
  4. 使用malloc统计和libmemunreachable
  5. 使用HWASan/Asan工具,查找内存错误
  6. 使用perfetto工具,他也可以分析java部分

题外话:就个人使用情况而言,并不是很推荐AS的LLDB,更推荐使用VScode的LLDB。而使用gdb的时候,我也不推荐使用命令行,更推荐使用Clion。它有非常快速且有好的UI界面。

猜你喜欢

转载自blog.csdn.net/xiaowanbiao123/article/details/131132738
今日推荐