• android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用


    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"
                    ]
                }
            ]
        },
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

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

    上图,前两个为android 如何分析应用的内存(四)——Visual studio code的LLDB中使用的调试配置。

    开始测试

    1. 添加断点
      使用VSCode打开我们的测试APP的工程文件。然后打开MainActivity.java在
      onCreate处添加断点,然后进行查看。如下图
      在这里插入图片描述

    2. app启动时停止
      按照android 如何分析应用的内存(十四)——jdb命令行里面的即时调试小段,运行如下代码:

    adb shell am set-debug-app -w com.example.test_malloc
    
    • 1

    然后启动应用,此时应用应该停下,并显示:Waitting for Debugger
    详细过程见:android 如何分析应用的内存(十四)——jdb命令行

    1. 转发端口
      运行下面的命令,将Android设备内部的端口,转发到本机5039
    pid=($(adb shell ps -A |grep -i  malloc)) ; echo ${pid[2]};adb forward tcp:5039 jdwp:${pid[2]};
    
    • 1
    1. 运行VSCode的调试
      使用快捷键command+p 进入文件搜索框,输入:debug加上空格。选中对应的调试即可。
      在这里插入图片描述

    一切正常,那么vscode将会停在我们的断点处,如下:
    在这里插入图片描述

    如上,几乎可以看到平时调试需要用到的所有东西。如

    1. 查看,修改变量
    2. 添加,删除watchpoint
    3. 切换栈帧
    4. 暂停单个线程
    5. 捕获异常

    但,vscode的debugger插件,并没有提供直接运行jdb命令的接口。在其控制台中,只能执行表达式。如下
    在这里插入图片描述

    故障排除

    问题:如果在调试控制台中,不能正确执行表达式

    解决:

    • 切换栈帧和变量
    • 切换插件版本,或者更新为最新

    Debug Visualizer查看数据结构

    在前面安装了第三个插件Debug Visualizer,它可以用来查看数据结构。可以在watchpoint中出现的都可以查看,如下。

    1. command+shitf+p:打开命令输入框

    2. 键入:Debug Visualizer:New View
      在这里插入图片描述

    3. 然后在新打开的UI框中,输入一个需要查看的变量。如下图
      在这里插入图片描述

    调整大小,我们可以很清晰的看到各个变量之间的关系

    注意:Debug Visualizer目前只能查看当前栈帧的变量

    至此,VSCode的java调试,介绍完毕。

    这里需要解释一下,为何没有介绍Android Studio的java调试。就我目前的使用习惯来看。Android Studio非常适合应用开发者。但存在如下几点不足

    • 调试别人应用只有源码,无法编译时,调试困难,如原生应用
    • Android studio运行异常卡顿

    故此,不管是应用开发者还是Framework开发者,这里都推荐使用VS code进行调试

    下一个小节,将会介绍怎么查看Android的堆内存。似乎到了Android应用最关键的时刻了。敬请期待

  • 相关阅读:
    一次生产死锁问题的处理
    【Sql】sql server还原数据库的时候,提示:因为数据库正在使用,所以无法获得对数据库的独占访问权。
    K8S Pod
    不想搞了,4年经验去面试10分钟就结束了,如今测试岗为什么这么难......
    环境生态学知识点
    Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
    k8s之容器内存与JVM内存
    外包干了3天,技术退步明显.......
    vue3中多层嵌套的JSON中的内容
    java 同学聚会AA制共享账单系统springboot 小程序022
  • 原文地址:https://blog.csdn.net/xiaowanbiao123/article/details/132067245