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

news2024/7/4 5:08:44

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中使用的调试配置。

开始测试

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

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

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

然后启动应用,此时应用应该停下,并显示: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. 运行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应用最关键的时刻了。敬请期待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/826082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 中引入ffmpeg 动态库

1、前期准备 在qt引入ffmpeg动态库的时候,需要准备ffmpeg的动态库和头文件。 2、打开qt项目 在qt项目的.pro文件中添加以下几行代码 INCLUDEPATH $$PWD/thirtLib/ffmpeg4.2/include win32: LIBS -L$$PWD/thirtLib/ffmpeg4.2/lib/ -lavcodec -lavdevice -lavf…

亚马逊云科技与真格基金发起「AI超新星计划」,助力早期创业者快速启动项目

大模型创业热度仍旧在持续增加,“百模大战”中AI创业者们的机会更多是在应用层。为了尽可能降低AI创业者的启动门槛,亚马逊云科技携手头部早期投资机构真格基金共同发起了「AI超新星计划」,为心怀梦想的AI应用创业者们提供了从云资源、模型选…

[腾讯云Cloud Studio实战训练营]基于Cloud Studio完成图书管理系统

[腾讯云Cloud Studio实战训练营]基于Cloud Studio完成图书管理系统 ⭐前言🌜Cloud Studio产品介绍1.登录2.创建工作空间3.工作空间界面简介4.环境的使用 ⭐实验实操🌜Cloud Studio实现图书管理系统1.实验目的 2. 实验过程2.实验环境3.源码讲解3.1添加数据…

如何解决大量小文件传输慢的问题

在信息化社会的今天,大量小文件传输已经成为日常工作中不可或缺的需求。无论是云存储、大数据处理还是软件更新等场景,都需要快速高效地传输大量小文件。然而,传统的传输方式往往受到网络连接速度、传输协议和存储介质等方面的限制&#xff0…

【从零开始学习JAVA | 第三十六篇】IO流下的高级流

目录 前言: 1.缓冲流: 2.转换流: 3.序列化流: 4.打印流: 5.压缩流: 总结: 前言: 在前面我们从IO流体系出发,分别介绍了字节流和字符流,并且详细讲解了其…

推荐两款github敏感信息搜集工具(gsil、gshark)

推荐两款github敏感信息搜集工具(gsil、gshark) - 云社区 - 腾讯云 (tencent.com) github敏感信息泄露是很多企业时常忽视的一个问题,国外有一份研究报告显示,在超过24,000份的GitHub公开数据中,发现有数千个文件中可能…

python开发实战——ip池

前言 代理IP池是一组可用的代理IP地址,用于访问网站或执行其他网络请求。它可以帮助我们在网络请求时隐藏我们的真实IP地址,从而提高网络安全性、匿名性和稳定性。同时,代理IP池还可以通过定时更新和测试代理IP,保证代理IP的有效…

C#生成dll给c++调用 方法二COM方式 vs2022 NO Make Assembly COM-Visible选错了 不需要clr

有些C项目中也用了C语言.c,用方法一就无法使用【不能使用 /clr 选项编译 C 文件】。就用方法2。 方法二:COM方式 参考: https://www.5axxw.com/questions/content/2ozion 1.C# 生成dll using System; using System.Collections.Generic; using System.Linq; usin…

【Linux多线程】基于生产消费模型写的一个实例(附源代码+讲解)

生产消费模型 生产消费模型为何要使用生产者消费者模型生产者消费者模型优点 基于BlockingQueue的生产者消费者模型BlockQueue.cc代码解释 BlockQueue.hpp代码解释 Makefile代码解释 Task.hpp代码解释 生产消费模型 为何要使用生产者消费者模型 生产者消费者模式就是通过一个…

tdengine入门详解

TDengine是什么? TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计,基于C语言开发。 什么是时序数据库?时序数据产生…

三元运算符引发的自动拆装箱问题

文章目录 问题背景问题排查排查过程问题扩展总结 问题背景 生产环境上出现空指针异常,追踪报错位置得知以下代码报错 if (isNull(aiGroup)) {return null;}aiGroup.setNum(isNull(param.getNum()) ? aiGroup.getNum() : param.getNum().doubleValue());问题排查 …

1500-2000元预算性价比吉他推荐,雅马哈FG800和VEAZEN费森VZ90怎么选?评测对比哪一款更适合初学者入门选购!

在2000元价位入门进阶吉他圈里,可谓是群雄角逐,Yamaha 雅马哈入门级FG800系列和VEAZEN 费森VZ90系列是一直都很热销的面单吉他型号,初学者想要在其中挑选出一把合适自己的吉他还是有点难度的。 那么,今天就以它们为本期的评测主角…

企业级高负载web服务器-Tomcat小项目

目录 web静态动态页面区别安装java环境安装Tomcat安装Tomcat包到目录查看Tomcat主目录结构查看Tomcat配置目录结构Tomcat管理Tomcat web管理功能 部署jpress应用 web静态动态页面区别 静态页面: 在网站设计中,纯粹HTML格式的网页(可以包含图…

后端整理(JVM、Redis、反射)

1. JVM 文章仅为自身笔记 详情查看一篇文章掌握整个JVM,JVM超详细解析!!! 1.1 什么是JVM jvm是Java虚拟机 1.2 Java文件的编译过程 程序员编写代码形成.java文件经过javac编译成.class文件再通过JVM的类加载器进入运行时数据…

MFC、Qt、WPF?该用哪个?

MFC、Qt和WPF都是流行的框架和工具,用于开发图形用户界面(GUI)应用程序。选择哪个框架取决于你的具体需求和偏好。MFC(Microsoft Foundation Class)是微软提供的框架,使用C编写,主要用于Windows…

蔚小理新势力互联网造车在CAN FD硬件主框架及后装控制方案开发

在国内,新势力造车影响已经非常之大,整个造车大潮中,新整车企业蔚来汽车、小鹏汽车、理想汽车无一例外选择了CAN FD作为主要的车载通信总线,特斯拉推出了引领汽车EE架构集中化的趋势,即使在车载以太网EE架构快速发展的…

BES 平台 SDK之充电盒与耳塞串口单工通信

本文章是基于BES2700 芯片,其他BESxxx 芯片可做参考,如有不当之处,欢迎评论区留言指出。仅供参考学习用! BES 平台 SDK之主从耳组队_谢文浩的博客-CSDN博客 关于系统主从耳组队流程可参考上一篇文章。链接如上所示! …

初识集合和背后的数据结构

目录 集合 Java集合框架 数据结构 算法 集合 集合,是用来存放数据的容器。其主要表现为将多个元素置于一个单元中,用于对这些元素进行增删查改。例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)。 Java中有很多种集…

捷码低代码|Modal模态框组件详解

知识补充: 模态组件是一种在用户界面中显示的特殊类型的组件。它们被设计为在应用程序的其他部分被屏蔽或暂停的情况下引导用户完成一个特定的任务或交互。 常见的模态组件包括: 1、弹出窗口(Popup):弹出窗口是一种常见…

Unity中UGUI的 OnPopulateMesh函数与VertexHelper类

Graphics类 当一个UGUI的UI元素生成顶点数据时会调用Graphics类中的 OnPopulateMesh(VertexHelper vh) 函数,我们可以在这个函数中修改顶点的数据或者获取顶点的数据。 UGUI中与显示相关的控件,例如Image、Text、RawImage等都继承自MaskableGraphic类&a…