Android Java应用程序调用跟踪

Android稳定性系列3 ANR的信息收集过程 一 ANR场景 无论是四大组件或者进程等只要发生 ANR,最终都会调用 AMS.appNotResponding() 方法,下面从这个方法说起。 以下场景都会触发调用 AMS.appNotResponding 方法: Service Timeout:比如前台服务在20s内未执行完成; BroadcastQueue Timeout:比如前台广播在10s内未执行完成 InputDispatching Timeout:输入事件分发超时5s,包括按键和触摸事件。 frameworks/base/core/jav 阅读详情

Sun已经提供java platform debugger architecture (jpda),其中有示例程序演示如何跟踪应用程序,在此基础上进行更改后可以跟踪Android ap,点此下载。


Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成

  1.Java虚拟机提供了Java调试的功能

  2.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试


JPDA的构架

  JPDA通过两个接口和协议来完成如上的说明,分别是JVMTI(Java虚拟机工具接口)、JDWP(Java调试连线协议)和JDI(Java调试接口)。

  1.JVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断点)和通知(Notification譬如到达某个断点时通知客户端),该接口由虚拟机实现者提供实现,并结合在虚拟机中

       2.JDWP定义调试服务和调试器之间的通信,包括定义调试信息格式和调试请求机制 3.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互,Java语言实现,调试器实现者可直接使用该接口访问虚拟机调试服务。


下载后使用方法如下:

1、去掉后缀.jpg后改文件名为.zip,解开到路径/home/user/java15_demo_jpda

2、cd java15_demo_jpda

3、根据jdk安装路径更改env.sh内容

4、找到要跟踪应用的pid
     例如:

user@test:adb shell ps | grep gallery
app_3     10480 1469  140668 27840 ffffffff afd0c57c S com.android.gallery
可知pid=10480.

5、adb forward tcp:9000 jdwp:pid_no              这里pid_no=10480
6、java com.sun.tools.example.trace.Trace -output trace_flow_dir
Note: trace_flow_dir is the directory name to place output


env.sh内容

export CLASSPATH=.:/usr/lib/jvm/java-1.5.0-sun-1.5.0.19/lib/tools.jar:/home/user/java15_demo_jpda


运行结束后,目录/home/user/trace_flow_dir中按各线程分别建立文件夹来存放调用栈消息如下

user@test:ls trace_flow_dir
_10__Binder_Thread__3  _11__Thread-14       _1__main        _7__Binder_Thread__1
_11__GLThread          _12__image-loader-0  _2__HeapWorker  _8__Binder_Thread__2


_11__Thread-14

====== <11> Thread-14 ======
run  --  com.android.internal.policy.impl.PhoneWindow$1
    getContentResolver  --  android.content.ContextWrapper
        getContentResolver  --  android.app.ContextImpl
    getInt  --  com.motorola.android.provider.MotorolaSettings
        getString  --  com.motorola.android.provider.MotorolaSettings
            getString  --  com.motorola.android.provider.MotorolaSettings$NameValueCache
                getLong  --  android.os.SystemProperties
                    native_get_long  --  android.os.SystemProperties
                query  --  android.content.ContentResolver
                    acquireProvider  --  android.content.ContentResolver
                        getScheme  --  android.net.Uri$StringUri
                            access$300  --  android.net.Uri
                        getAuthority  --  android.net.Uri$StringUri
                            getAuthorityPart  --  android.net.Uri$StringUri
                            getDecoded  --  android.net.Uri$AbstractPart
                                access$300  --  android.net.Uri
                        getAuthority  --  android.net.Uri$StringUri
                            getAuthorityPart  --  android.net.Uri$StringUri
                            getDecoded  --  android.net.Uri$AbstractPart
                                access$300  --  android.net.Uri
                        acquireProvider  --  android.app.ContextImpl$ApplicationContentResolver
                            acquireProvider  --  android.app.ActivityThread
                                getProvider  --  android.app.ActivityThread
                                    getExistingProvider  --  android.app.ActivityThread
                                asBinder  --  android.content.ContentProviderProxy



方法栈跟踪 往期推荐 Log插桩调试smali代码 DDMS工具使用 快速定位关键代码 Smali文件详解 Java层逆向分析-Dalvik字节码 修改资源去广告 今天分享方法栈跟踪,掌握本次的内容,有助于在关键方法里面插入栈跟踪代码,理清该方法的上层调用关系。 一:方法栈跟踪定义 之前在学习虚拟机的时候,提到过栈结构,它是一种先进后出的数据结构。 栈跟踪法属于动态调试的方法,原理是输出运行时栈调用跟踪信息,然后查看函数调用序列来理解方法的执行流程。 二:下载、安装好搜小说应用程序 以“好搜小说大全.apk”文件作为案 阅读详情

相关推荐

【安卓逆向】 栈跟踪及toast方法及Log日志的插入和分析

在安卓逆向中,常常用到栈跟踪及toast方法及Log日志的插入 以便于我们更好的分析代码 下面就演示记录这三个方法的使用及简单的分析: 1.插入Log信息输出: 在方法的开始处,我们右击->插入代码->Log信息输出 然后我们反编译apk,并安装到模拟器,打开ddms查看log日志 这里我们就看到了刚刚在更新代码添加的log信息。 2.toast弹窗的输出 ...

基德的博客 6398

android追踪工具Trace概述

systrace ​ systrace 是分析 Android 设备性能的主要工具。不过,它实际上是其他工具的封装容器:它是 atrace 的主机端封装容器,是用于控制用户空间跟踪和设置 ftrace 的设备端可执行文件,也是 Linux 内核中的主要跟踪机制。systrace 使用 atrace 来启用跟踪,然后读取 ftrace 缓冲区并将其全部封装到一个独立的 HTML 查看器中(虽然较新的内核支持 Linux 增强型柏克莱封包过滤器 (eBPF),但以下文档内容仅适用于 3.18 内核(无 eFPF

垮掉的一代人的专栏 1万+

r0tracer:安卓Java层多功能追踪脚本

r0示踪剂 安卓Java层多功能追踪脚本 AKA:精简版异议+ Wallbreaker 功能: 根据黑白名单批量追踪类的所有方法 hook(“ javax.crypto.Cipher”,“ $”); 在命中方法后打印出该类或对象的所有域值,参数,调用栈和返回值 极简的文本保存日志机制,易于搜索的关键参数 针对加壳应用找不到类时可以切换Classloader 使用方法: 修改r0tracer.js文件最底部处的代码,开启某人的挂钩模式。 推荐使用Frida14版本,并且将日志使用-o参数进行输出保存 $ frida -U -f com.r0ysue.example -l r0tracer.js --no-pause -o saveLog5.txt “ -f”为Spawn模式,去掉“ -f”为附加模式 Frida版本= <12时,要加上--runtime=v8选项 $ frida -U co

android 函数调用跟踪,[原创]使用 frida 追踪android方法调用_超级醒目

点击"测试"按钮,触发onClick点击事件,调用test方法,test方法内部又分别调用了gainAge和gainEnjoy方法。方法的调用层级、参数和返回值,都一目了然。使用frida调试是相当happy!!!本次测试项目包名是com.example.king.testappsflyer,frida的js脚本主要代码:varlogContentArray=newArray();var...

weixin_30099269的博客 2837

Android代码-一个对JAVA应用程序运行情况进行追踪、告警和分析的系统

Apache SkyWalking SkyWalking: an APM(application performance monitor) system, especially designed for microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures. Abstract SkyWalking is an open source APM system, including monitoring, tracing, diagnosing capabilities for distributed system in Cloud Native architecture. The core features are following. Service, service instance, endpoint metrics analysis Root cause analysis Service topology map analysis Ser

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

Android性能优化——APP启动优化及Trace使用

开发Android的程序员都知道,自己开发APP时候,如果不做任何处理,在用户打开应用时总会先出现黑屏或者白屏,之后才进入MainActivity中。这是加载程序时间过长造成的。具体的启动原理我就不再这里叙述了,可以百度一下,很多博客讲的都很清楚。我这里只说主要的部分。简单来说,从用户点击应用时,程序会执行Application的onCreate和Activity(入口Activity)的onCr...

qq_32019367的博客 1138

开关变换器分析:大信号模型与小信号模型

是电力电子系统建模中的两类基本方法,分别用于描述系统在不同工作条件下的动态行为。它们的核心区别在于是否对变量进行线性化近似,以及适用的分析场景。

创新改变世界! 1907

android 权限模型,Android 6.0 运行权限模型 ContentResolver查询通讯录出错

在Android 6.0中引入的新的运行权限模型( runtime permission model),是一个值得Android开发者考虑的重要问题。在Android 6.0之前,作为一个开发者,你可能会在AndroidManifest.xml文件中定义所需的权限,并专注于您的业务逻辑。然而,由于Android 6.0的出现,故事变得更复杂了,它为用户提供了更多的安全性和可控性。让我们使用一个简单...

weixin_33001177的博客 611

深度学习 tesorflow2.0版本 入门第一章

为什么要学tensflow 深度学习发展迅猛 框架灵活 google开发 公司应用广泛 2.0更加灵活 后面会学习的项目 图像分类 房价预测 泰坦尼克号生存预测 文本分类 文本生成 机器翻译 核心部分 模型训练 tesorboard----> 查看模型训练进度 模型保存和部署 分布式训练-----> 加速训练速度,提升训练效率 TensorFlow常用库:Tfds, tfhub,tensor2tensor 多平台云端环境GPU:Goolgle cloud环境配置,AWS环境配置 kaggle平

weixin_46969441的博客 1236

AG32VF407直流电流采集仪设计:从1uA到10A宽范围采样与FPGA加速方案

本文详细介绍了基于AG32VF407芯片的直流电流采集仪设计方案,实现了从1uA到10A的宽范围采样。方案采用低噪声电源、精密运放调理、高速比较器自动档位切换及高精度ADC同步采样,并重点阐述了利用AG32VF407片内FPGA实现硬件加速以提升性能的架构思路,为精密电流测量提供了完整的硬件与FPGA加速解决方案。

weixin_33245447的博客 310

android调用其他类onclick_使用Frida打印Java类函数调用关系

本文为看雪论坛文章看雪论坛作者ID:无造本文为看雪安卓高研3w班(8月班)优秀学员作品。下面先让我们来看看讲师对学员学习成果的点评,以及学员的学习心得吧!讲师点评感谢Google的开源精神。通过对Android源码进行阅读,可以很快发现ART下类函数的四种调用:java调用java,java调用jni,jni调用java,jni调用jni;而java函数又有两种运行模式:interpre...

weixin_39866419的博客 770

Python学习24:中国古代数学问题——物不知数(Python123)

意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。题目为‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?现假设物品总数不超过n (n

weixin_60530224的博客 2万+

frida学习 && android开发学习(一)

frida主要是看 r0ysue大佬的github android开发主要看安卓开发文档中文版 当然frida的api有些功能不明白,主要看官方文档 manifest文件描述了项目的基本特征并列出了组成应用的各个组件 activity_main.xml 此 XML 文件定义了 Activity 界面的布局。它包含一个 TextView 元素,其中具有“Hello, World!”文本 Android 的图形用户界面由多个视图(View)和视图组(ViewGroup)构建而成。 这是视图的唯一标识符。可以在

qq_37439229的博客 576

realsense D455深度相机+YOLO V5结合实现目标检测(一)

realsense D455深度相机+YOLO V5结合实现目标检测代码来源环境配置代码分析:1.如何用realsense在python下面调用的问题:2.对main_debug.py文件的分析:结束语 可以实现将D435,D455深度相机和yolo v5结合到一起,在识别物体的同时,还能测到物体相对与相机的距离。 说明一下为什么需要做这个事情?1.首先为什么需要用到realsense D455深度相机? 因为他是普通的相机还加了一个红外测距的东西,所以其他二维图像一样,能够得到三维世界在二维像素平面的投影

文一生 3万+

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

结合源码深入理解Android Crash处理流程

应用程序crash在开发过程中还是很常见的,本文主要是从源码的角度去跟踪下Android对于crash的处理流程。App crash的全称:Application crash。而Crash又分为:native crash和framework crash(包含App Crash)。我们在平时开发的时候对于可能有异常的地方,一般都是用try-catch语句去catch 异常信息,但当没有有效的catc...

张许平的博客 2505

Vue - 最新详细实现滑块拖动拼图验证,网站登录验证滑块验证功能,拖动滑块到图片缺口的位置即为成功,滑块验证安全检测(详细示例代码,一键复制运行)

您一定见过很多系统都“配备”了滑块验证、拼图验证、找不同等,本质上都是为了验证登录系统的是人还是机器(代码),如下图所示效果: 您打开项目根目录,终端执行如下命令:拼图式拖动滑块验证 验证拖动滑块验证,滑动拼图/图片点选验证 接下来,在中加入以下代码: 如下图所示: 更多配置示例和参数详见官方文档,以下便是如上效果图的代码:.........

🏆 前端领域优质创作者 1万+

Android AudioManager控制系统声音的流程

<br />首先上层java调用<br />XXXPlayer<br />AudioManager audiomanage = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);<br />audiomanager就是我们定义的控制系统声音的对象,(如果context报错,可将其改成XXXPlayer.this)<br />audiomanager.SetStreamVolume(AA,BB,CC),是我们可以直接使用的AudioM

zeng622peng的专栏 3381

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android 调用堆栈跟踪

Android开发中,我们也会经常遇到段错误,也就是SIGSEGV(11),这个时候libc的backtrace会打印出对应的堆栈信 息,而你看到的仅仅是一对数字,好像无从查起。 如下面这一从串断错误: ActivityManager( 1105): Displayed activity com.android.browser/.BrowserActivity: 2460 ms (to

JiangKan的专栏 541

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android上的bug定位(troubleshooting) 分享

转自http://swverification.blog.sohu.com/141315680.html    对于android上的bug定位的文档很少,因为应用程序千差万别的,出现的问题也不尽相同,不过也是有规律可循,大的方向定位是可以做到的,我们对应用程上的问题可以得到相关

歪歪的blog 1195

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

跟踪Android callback 调用堆栈

0 在调试 android  系统时可以通过打印调用堆栈 callback stack 来分析和解决android问题。 1 java 层打印callback stack 可以通过 catch exception 然后 使用 Log.w(LOGTAG, Log.getStackTraceString(throwable)) 打印调用堆栈 Throwable throwable = new

android 分析 1万+

安卓代码跟踪方式学习笔记

分享一下学习过程中的心得,主要献给和我一样起步晚又对安卓产生浓烈兴趣的童鞋们!   一、代码跟踪的介绍&使用工具   代码跟踪常用于调试程序中,跟踪并了解程序的执行轨迹和执行逻辑。这样来说,对Java这样的高级语言来说,我们容易理解也容易调试。但是像一些低级语言,例如ASM、Smali来说难度就很大了,因为反汇编这样的语言,我们需要一次性记住很多乱七八糟的关键词才能成功,因而代码跟踪的技术

Beautiful Attack and Defence 2326

java在安卓上的应用程序错误_android – 解决’应用程序已停止’崩溃错误

构建AOA应用程序,我的Android设备与外部附件通信,在这种情况下是arduino.当我连接附件时,我的Android应用程序正确启动,因为我的mainActivity的intent-filter中有USB_ATTACHED操作.但是,我的Android应用程序很可能在与USB配件断开连接时崩溃.我的shell在断开连接时立即从TCPIP切换到USB模式但重新连接我得到完整的堆栈跟踪任何And...

weixin_39680121的博客 931

基于安卓平台的Yolov8+Bytetrack,实现多目标跟踪。

创作灵感#最近在实习了,主要工作是进行计算机视觉的调优。同时负责在嵌入式平台的部署。公司拿出的方案是在RK3588上面部署,但是居然不用RKNN的方案,转而用安卓平台,你敢信!?说是为了后续代码的通用,好吧...所以这一期就分享一下我在安卓平台部署yolov8+bytetrack的过程吧。。。

weixin_58365805的博客 2009

【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪

OpenCV(Open Source Computer Vision Library)是一个基于 Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习软件库。它由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 在 Android 开发中具有极高的应用价值,它提供了丰富的函数和工具,能够帮助开发者快速实现各种视觉功能,大大降低了开发成本和难度。

2503_90221393的博客 3607
上一篇: apk破解实战
下一篇: system_server crash现象研究
cloudwu007
博客等级 码龄18年 42粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值