Android Java应用程序调用跟踪

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值