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"
                ]
            }
        ]
    },
}

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

上图,前两个为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应用最关键的时刻了。敬请期待

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数论分块学习笔记

准备开始复习莫比乌斯反演,杜教筛这一部分,先复习一下数论分块 0.随便说说 数论分块可以计算如下形式的式子 ∑ i 1 n f ( i ) g ( ⌊ n i ⌋ ) \sum_{i1}^{n}f(i)g(\lfloor\frac{n}{i}\rfloor) ∑i1n​f(i)g(⌊in​⌋)。 利用的原理是 ⌊ n i ⌋ \lf…

GoogLeNet卷积神经网络-笔记

GoogLeNet卷积神经网络-笔记 GoogLeNet是2014年ImageNet比赛的冠军, 它的主要特点是网络不仅有深度, 还在横向上具有“宽度”。 由于图像信息在空间尺寸上的巨大差异, 如何选择合适的卷积核来提取特征就显得比较困难了。 空间分布范围更广的…

采集数据筛选-过滤不要数据或只保留指定数据

采集文章数据,有时候会遇到一些不需要采集的数据,或者只想采集一些特定的数据,可以使用简数采集器的内容过滤功能,对采集的数据进行筛选,只有符合的数据才采集保留。 可以用于过滤掉一些广告、专题、网站首页等无效数…

ESD防静电监控系统在SMT产线中的应用案例

作为电子厂的关键制造环节之一,SMT(表面贴装技术)产线的效率和质量对企业的竞争力至关重要。为了提高生产线的管理效率和保障生产环境的质量,许多电子厂开始采用MES生产管理系统和ESD防静电监控系统的综合解决方案。 在SMT产线中安…

SpringBoot项目增加logback日志文件

一、简介 在开发和调试过程中,日志是一项非常重要的工具。它不仅可以帮助我们快速定位和解决问题,还可以记录和监控系统的运行状态。Spring Boot默认提供了一套简单易用且功能强大的日志框架logback,本文将介绍如何在Spring Boot项目中配置和…

无涯教程-Perl - 循环语句

在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的:函数中的第一个语句首先执行,然后第二个执行,依此类推。 Perl编程语言提供了以下类型的循环来处理循环需求。 Sr.No.Loop Type & 描述1 while loop在给定条…

浅谈大数据软件的功能性分析

在当今时代的潮流中,工作中遇到大数据处理的时候非常多,因此需要一些大数据分析软件帮助人们进行工作。由于这些软件针对的对象不同,因此使用方法也不同,那么为了帮助更多的人了解大数据分析软件,我们就对这些软件的功…

Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建 qt

Java版知识付费源码 Spring CloudSpring BootMybatisuniapp前后端分离实现知识付费平台 提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含:录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署,免费售…

【3维视觉】3D空间常用算法(点到直线距离、面法线、二面角)

3D空间点到直线的距离 3D空间点到直线的距离 3D空间的曲率 三维空间有三个基本元素,点,线,面。那么曲率是如何定义的呢? 点的曲率? 线的曲率? 面的曲率? 法曲率 设曲面上的曲线在某一点处的切…

prometheus+grafana进行服务器资源监控

在性能测试中,服务器资源是值得关注一项内容,目前,市面上已经有很多的服务器资 源监控方法和各种不同的监控工具,方便在各个项目中使用。 但是,在性能测试中,究竟哪些指标值得被关注呢? 监控有…

Git下:Git命令使用-详细解读

今天给大家讲一讲 Git常用命令的使用说明,希望本篇文章对大家有所帮助。 一、Git 安装 Git 的详细安装教程:见上一篇文章《Git上:Git安装教程》: Git上:全网最全最详细的Git安装教程,建议收藏保存 二、…

TDosCommand 组件来执行 JavaScript 脚本(nodejs)

可以在 Delphi 中使用 TDosCommand 组件来执行 JavaScript 脚本。但是,由于 JavaScript 是一种脚本语言,它通常在浏览器中运行,因此您需要使用一种 JavaScript 引擎来执行 JavaScript 脚本。常见的 JavaScript 引擎有 Node.js、Rhino、V8 等等…

面试题学习以及问题

redis redis缓存 缓存穿透 布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是 redisson实现的布隆过滤器。 它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。在一 开始都是0,当一个key来了之后经过3次hash计算&…

vscode配置c++环境

第一步:安装vscode编辑器 预先安装: vscode(https://code.visualstudio.com/)在vscode中安装 C/C extension for VS Code(在左侧扩展栏中搜索 “C”) 第二步:安装MinGW-w64工具链 MinGW 提供…

超详情的开源知识库管理系统- mm-wiki的安装和使用

背景:最近公司需要一款可以记录公司内部文档信息,一些只是累计等,通过之前的经验积累,立马想到了 mm-wiki,然后就给公司搭建了一套,分享一下安装和使用说明: 当前市场上众多的优秀的文档系统百…

VBA技术资料MF36:VBA_在Excel中排序

【分享成果,随喜正能量】一个人的气质,并不在容颜和身材,而是所经历过的往事,是内在留下的印迹,令人深沉而安谧。所以,优雅是一种阅历的凝聚;淡然是一段人生的沉淀。时间会让一颗灵魂&#xff0…

设置系统编码 Beta

在yolov5环境搭建过程中会遇到如下的编码错误警告: 这时,按住“ctrlc”中止进程,然后设置系统编码: 电脑右键属性打开: 重启之后等安装好了,记得回去把bae键取消。

Ansible自动化运维工具 —— Playbook 剧本

playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates:模…

iOS——Block one

块类似于匿名函数或闭包,在许多其他编程语言中也存在类似的概念。 可以访问上下文,运行效率高 Block 以下是块的一些基本知识: 块的定义:块是由一对花括号 {} 包围的代码片段,可以包含一段可执行的代码。块的定义使…

Stable Diffusion - Stable Diffusion WebUI 支持 SDXL 1.0 模型的环境配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132056980 SDXL 1.0 版本 是 Stable Diffusion 的最新版本,是基于潜在扩散模型的文本到图像生成技术,能够根据输入的任何文…