android 如何分析应用的内存(十五)——Visual Studio Code 调试Android 应用
在上一篇文章介绍了jdb调试java应用
接下来介绍用UI界面调试java应用,达到同jdb一样的效果。
同样的UI界面有很多选择,如Eclipse,Android Studio,Visual Studio Code.因为Android Studio的诸多不便,结合自身的使用习惯,这里推荐并介绍Visual Studio Code
安装必要的插件
在插件市场中,搜索Debugger for java,如下图
查看其requirements还需要安装一个插件:Language Support for Java™ by Red Hat
在插件市场中搜索,并安装它,如下图
- Language Support for Java™ by Red Hat:代码搜索,上下文提示等功能。
- Debugger for java:调试功能
当然也可以直接安装Extension Pack for Java包,它包含上面两个插件,以及其他java开发需要的插件
为了能够更加方便查看数据,可安装一个插件:Debug Visualizer。
Debug Visualizer可以用图形的方式,展示变量的关系
配置attach到目标进程
菜单->运行->打开配置
在配置文件中加入如下内容:
{"launch": {"configurations": [...{//debugger for java插件对应的一个名字。必须为java"type": "java",//给这个配置取的一个名字"name": "远程调试Android应用",//因为是远程调试,只能为attach"request": "attach",//远程调试的主机名,使用了adb forward 映射到了本地,因此为:localhost"hostName": "localhost",//远程调试的端口号,使用了adb forward映射到了5039"port": 5039,//需要调试的源代码文件//第一个是我们测试APP的源文件位置//第二个是http://t.csdn.cn/JBnld中下载的Android 12的源码"sourcePaths": ["/Users/biaowan/AndroidStudioProjects/Test_Malloc.old/app/src/main/java","/Users/biaowan/aosp/frameworks/base/core/java"]}]},
}
如下图
上图,前两个为android 如何分析应用的内存(四)——Visual studio code的LLDB中使用的调试配置。
开始测试
-
添加断点
使用VSCode打开我们的测试APP的工程文件。然后打开MainActivity.java在
onCreate处添加断点,然后进行查看。如下图
-
app启动时停止
按照android 如何分析应用的内存(十四)——jdb命令行里面的即时调试小段,运行如下代码:
adb shell am set-debug-app -w com.example.test_malloc
然后启动应用,此时应用应该停下,并显示:Waitting for Debugger
详细过程见:android 如何分析应用的内存(十四)——jdb命令行
- 转发端口
运行下面的命令,将Android设备内部的端口,转发到本机5039
pid=($(adb shell ps -A |grep -i malloc)) ; echo ${pid[2]};adb forward tcp:5039 jdwp:${pid[2]};
- 运行VSCode的调试
使用快捷键command+p 进入文件搜索框,输入:debug加上空格。选中对应的调试即可。
一切正常,那么vscode将会停在我们的断点处,如下:
如上,几乎可以看到平时调试需要用到的所有东西。如
- 查看,修改变量
- 添加,删除watchpoint
- 切换栈帧
- 暂停单个线程
- 捕获异常
但,vscode的debugger插件,并没有提供直接运行jdb命令的接口。在其控制台中,只能执行表达式。如下
故障排除
问题:如果在调试控制台中,不能正确执行表达式
解决:
- 切换栈帧和变量
- 切换插件版本,或者更新为最新
Debug Visualizer查看数据结构
在前面安装了第三个插件Debug Visualizer,它可以用来查看数据结构。可以在watchpoint中出现的都可以查看,如下。
-
command+shitf+p:打开命令输入框
-
键入:Debug Visualizer:New View
-
然后在新打开的UI框中,输入一个需要查看的变量。如下图
调整大小,我们可以很清晰的看到各个变量之间的关系
注意:Debug Visualizer目前只能查看当前栈帧的变量
至此,VSCode的java调试,介绍完毕。
这里需要解释一下,为何没有介绍Android Studio的java调试。就我目前的使用习惯来看。Android Studio非常适合应用开发者。但存在如下几点不足
- 调试别人应用只有源码,无法编译时,调试困难,如原生应用
- Android studio运行异常卡顿
故此,不管是应用开发者还是Framework开发者,这里都推荐使用VS code进行调试
下一个小节,将会介绍怎么查看Android的堆内存。似乎到了Android应用最关键的时刻了。敬请期待