android studio调试aosp手机userdebug版本无法查看局部变量和参数问题如何解决?

Android源代码(AOSP)调试 - Java部分 经过前面漫长的环境搭建、源码同步、编译之后,终于可以真正做点有意思的事情了 — AOSP源码调试。AOSP源码导入IDE内存优化因为源码非常多,所以导入时IDEA/AS会需要大量内存。所以我们需要编辑IDE的VM选项。配置文件为 IDEA的是IDEA_HOME/bin/idea.vmoptions AS的是AS_HOME/bin/studio.vmoptions 注意,AS有一个64位版本的配置文 阅读详情

背景:

平常系统开发过程中,经常需要对一些代码进行相关追踪,这个时候很多同学会使用马哥课程讲解的android studio直接进行调试的方法,但是近期有学员朋友在群里反馈它在调试过程中无法看到方法参数的值,局部变量值,只可以看到全局变量值。
在这里插入图片描述
因为我们都是使用模拟器居多,模拟器编译的版本一般都是eng版本,所以没有这个同学问题,针对这样一类问题一般都是可能和自己的手机设备版本类型有关系,这个有问题版本确定是一个userdebug版本。
可以通过如下方式确认:

test@test:~/disk2/nx563j_aosp14$ adb shell getprop | grep build.type
[ro.build.type]: [userdebug]
[ro.odm.build.type]: [userdebug]
[ro.system.build.type]: [userdebug]
[ro.system_ext.build.type]: [userdebug]
[ro.vendor.build.type]: [userdebug]
[ro.vendor_dlkm.build.type]: [userdebug]

可以确认是userdebug版本。

简单解决问题痛点:

方法1:
针对上面的问题,大家第一反应可能会说,既然eng版本没有问题,那么是否可以考虑编译一个整体eng的包不就行了?这种方法其实有条件情况下确实是一个最省事方法,但是很多时候出版本的不一定是自己,大家可能都是取公司编译好的版本用,然后修改自己模块push进去就行,所以很多时候不一定有完全eng的大版本可以使用。
所以这个直接使用eng版本还是存在一定的局限性,有时候不一定有条件获取到这个eng。

方法2:
针对自己关注的局部变量或者参数,可以考虑修改代码赋值给成员变量或者全局变量。这种方式当然是可以,但是比较麻烦,看一个局部变量就需要加对应成员变量全局变量不现实,还不如直接打印来的方便。

所以上面两个解决方法都确实有很多局限性。

彻底解决方法

突破点思路来源因为因为eng版本是可以看到局部变量的,其实不展示局部变量主要还是在于eng和userdebug在编译时候的保留的相关信息不一样,eng肯定编译时候保留的最多,基于这个背景我们做出如下解决方法:
这里以编译system_server的jar包services.jar为例子

第一步:
lunch到目标的eng版本
注意这里一般使用是正常目标加上-eng既可以,比如lunch xxx-eng
例如
但是这里注意如果是lineage系统的话直接breakfast xxx-eng可能有报错,建议可以用lunch命令:
用如下命令

lunch lineage_nx563j-eng

注意和平时breakfast nx563j相比多了lineage_,这个大家可以通过lunch命令看看列表找到自己目标
在这里插入图片描述

第二步:
进行make services

第三步:
push jar包然后重启system_server

 adb push out/target/product/nx563j/system/framework/services.jar /system/framework/services.jar
  adb shell killall system_server

最后看看userdebug版本debug也可以展示局部变量效果:

在这里插入图片描述

整体思路还是lunch目标时候变成eng版本,然后进行单模块编译push覆盖既可以。

以后待补充部分:eng和userdebug的编译差异是在哪里进行区分的,这块相关的代码后续有时间在考虑研究

更多framework实战开发干货,请关注下面“千里马学框架”

AOSP userdebug版本断点无法看到局部变量 解决AOSP userdebug版本断点无法看到局部变量 阅读详情

相关推荐

【AAAI 2025】轻量级特征增强新范式!FCM 模块助力小目标检测,即插即用提升模型泛化能力

本文介绍了AAAI 2025提出的轻量级特征增强新范式FCM模块,它通过显式分离并双向交互语义与空间特征,有效解决了小目标检测中特征信息失配的核心难题。该模块设计精巧,计算开销极低,能够即插即用式地嵌入YOLO等主流检测网络,显著提升模型对小目标的泛化检测能力,尤其适用于遥感、自动驾驶等对计算资源敏感的实际场景。

weixin_29056145的博客 287

用AS看AOSP的debug调试和trace查耗时实战

记录工作中用到的源码调试实战方法。

qq_32670947的博客 722

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2750

AOSP 14 framework debug无法看到变量的问题

在android framework的开发过程中,经常需要debug。在android 14以后,发现debug的过程中,android studio无法看到变量,原来是AOSP对编译做了优化,关闭优化即可。

618

线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等

线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等

zephyr_wang的博客 1万+

带你学习Android中的ContentObserver

通过使用,开发者可以有效地监听系统设置的变化,例如屏幕亮度等。这种机制使得应用能够动态响应系统设置的更改,提升用户体验。在实现需要与系统设置交互的应用时,合理使用是非常重要的。

执剑人 1311

问题系列---Android Studio调试services源码不显示参数值

问题系列主要的作用是把我在研究Android源码过程中遇到的各种问题集合起来,当然这些问题在google是没有搜到解决方案的,希望本系列可以帮助大家。

niurenwo的专栏 625

别再傻傻分不清了!STM32定时器里Prescaler和ClockDivision到底有啥区别?

本文深入解析STM32定时器中Prescaler和ClockDivision的区别与应用场景。Prescaler作为定时器的'心跳调节器',决定计数频率;而ClockDivision则是输入捕获的'抗噪滤镜',有效抑制高频噪声。通过实战案例和示波器实测数据,帮助开发者避免常见配置误区,提升嵌入式系统稳定性。

weixin_29193259的博客 319

Android studio断点调试,不显示变量的值

Android studio 断点调试的时候,不显示变量的值。经高人指定后,发现minifyEnabled混淆属性设置有问题。混淆如果开启的话,断点调试就不能显示变量的值。把minifyEnabled=false即可解决问题,如下图: ...

lixueqiang001的博客 2963

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

Ubuntu登录界面黑屏?手把手教你排查和修复LightDM启动失败(附debug命令详解)

本文详细介绍了Ubuntu系统中LightDM(Light Display Manager)启动失败导致登录界面黑屏的排查与修复方法。通过系统状态检查、调试模式分析、常见故障解决方案及高级调试技巧,帮助用户快速定位并解决LightDM相关问题,恢复正常的图形登录环境。

weixin_34005090的博客 316

Android Studio Cannot find local variable

今天从github上面clone了一个库, 打断点调试的时候发现明明走到了断点, 却一直提示 Cannot find local variable, 还以为Android studio被我玩炸了. 最终发现是该作者buildTypes 开启了混淆minifyEnabled truebuildTypes { debug { minifyEnabled true

MAIMIHO的博客 1万+

《基于YOLOv5/8/10的足球比赛球员识别系统毕设全指南:从开发到部署的一站式实战》

本文提出了一个基于YOLO系列模型的足球球员识别系统,具备完整的开发流程和技术方案。系统通过YOLOv5/8/10三大框架实现球员检测,平衡精度与速度需求。开发过程包含数据标注与增强、模型训练调优、PyQt5界面开发等关键环节,并提供了模型轻量化、多任务扩展等优化方向。系统可实现单张图像和视频流的实时识别,支持跨设备部署,适用于赛事分析和训练复盘场景。项目特色在于完整的技术实现路径和对不同YOLO框架的性能对比,为计算机视觉在体育领域的应用提供实践参考。

m0_71589036的博客 216

Android Studio调试时无法watch局部变量值

在Android Studio中下断点调试时,可以在“Watches”窗口中查看变量的。但是当要查看的变量是局部变量时,String path = getFilesDir().toString();在“Watches”窗口中无法查看path的值,如图1所示。 图1 无法显示局部变量的值可以通过修改gradle文件来实现显示局部变量值的功能。1 gradle文件简介Android Studio采用G...

hou09tian的博客 7769

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android Studio 在调试模式下查看不了局部变量

我在把eclipse的项目导入到studio后进行断电调试,发现都查看不了局部变量的值,后来上网查了下,说是在gradle文件把testCoverageEnabled设为false就可以了,试了下果然如此 buildTypes { release { debuggable false minifyEnabled false //删除没有用到的文件 ...

android开发笔记 4762

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

AndroidStudio调试出现查看不到变量数据:No Such instance field:

1.错误描述 AndroidStudio调试出现查看不到变量数据:No Such instance field: 2. 错误原因 因为build.gradle中添加了代码混淆; 3. 解决方案 关闭代码混淆: buildTypes { release { signingConfig signingConfigs.release ...

牛八少爷的专栏 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android Studio开发在手机上调试

手机设置,开启USB调试。设置,关于手机,找到版本号,快速多次点击,差不多就8下,输入锁屏密码,,进入开发者模式。

weixin_63307826的博客 572

使用Android Studio For Platform阅读&调试AOSP源码

本文我们使用Android官方提供的IDE(Android Studio For Platform)来打开AOSP源码,并进行debug调试,这样可以方便我们跟踪底层代码的调用流程。

写代码的林克 3889

Android Studio 找不到符号 变量xxx 类id

module中布局文件移动文件之后,发现代码编译错误,报错信息如下: 错误: 找不到符号 符号: 变量 tv_content 位置: 类 id 但是,在Android Studio里面点击id的使用,仍然可以跳转到xml里面。 原因是:代码是从一个module移动到另一个module,对R的引用还是引用的之前的module的,导致无法找到。 解决方法是:把import里面对R的引用删除掉,让A...

iblade的博客 1万+

安卓/aosp14上userdebug版本无法进行as调试debug问题

模拟器其实并不是persist.debug.dalvik.vm.jdwp.enabled控制的,哪怕模拟器上这个属性设置0,也一样是可以见到debug的所有进程。这个就需要进一步看看,难道是14模拟器目标默认编译persist.debug.dalvik.vm.jdwp.enabled就是为1?注意啦,这个就是为啥aosp13上没有问题,14有问题原因,疑问这个ENABLE_JDWP变量属于新加入的,在13代码上并没有。为啥aosp13上面可以,aosp14不可以,还有为啥aosp14的模拟器可以?

liaosongmao1的专栏 732

速通AOSP,成功编译调试Android源码

/ 今日科技快讯 /近日据不少网友反馈,爱奇艺App开始对投屏功能作出限制,之前黄金VIP会员支持最高4K清晰度投屏,现在只能选最低的480P清晰度,要想进行4K投屏必须购买白金VIP会员。不少网友表示,480P清晰度太低,几乎无法观看。/ 作者简介 /大家好,今天是年前的最后一篇文章,下周我就要休假回家过年了,公众号也会暂时停更。这里提前祝大家新年快乐,我们年后再见。本篇文章转自...

郭霖 3613

AOSP ~ GDB 远程调试

AOSP ~ GDB 远程调试

南柯好萌的博客 2493

Android studio debug代码时不显示变量值

出现的问题:debug的时候断点走不到,同时也不显示变量值 报错信息:java.lang.ClassNotFoundException: com.bjmulian.emulian.core.AppCache at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:...

qq_33172961的博客 7500
上一篇: 你知道桌面和壁纸Wallpaper都接收触摸事件原理吗?--第二篇
下一篇: 自由开发者aosp源码修改部分如何提交保存上传服务器?-记录AI帮助我们实现过程
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值