app和SystemProcess调试方案

app和SystemProcess调试方案

1 简要说明 4
2 环境要求 4
3 SettingsApp演示调试 4
4 SystemProcess演示调试 8

1 简要说明
  为了解决应用问题,有时我们需要调试应用。相比打印log来说,联调的优势在于,它能够实时的去观测变量的变化,去更加直观,更加便捷的看出问题所在,此文便是解决此问题产生。
主要分为两部分来讲解,一部分为app调试,一部分为系统SystemProcess(主要调试 AMS WMS等系统服务代码)

2环境要求
开发手机一部,eng版本。
eclipse 调试环境
代码

3SettingsApp演示调试
首先,我们打开 eclipse,新建一个工程,应用名为test,我们可以看到包名为 com.example.test
我们修改下代码:
将activity_main.xml改为:
这里写图片描述

MainActivity.java 加入:
这里写图片描述

下来我们来在settext上面打上断点,手机连上电脑,右键左侧的工程名(test)选择debug As 选择第一个应用程序,选中手机设备。
随后我们便会发现我们断点打在了text_id.setText(“test app “); 这一行。
我们点击F5选择跟入, 会发现系统提示我们找不到TextView.java代码。

我们这里点击Attach Source,进行选择代码位置:

我们在settext函数设置断点。
然后我们点击工程名,右键选择debug As 选择应用程序即可,找到连接的手机,开始调试。
我们会发现代码断点起作用,停在settext那行,然后我们点击F5进行跟入。
会有个界面:
这里写图片描述

我们点击Attact Source 去找到TextView代码。

这里有一个需要注意的地方:
我们来看下TextView.java的对应包名,package android.widget;
所以我们在选择路径的时候,要选择在android/widget的父类,如此以来,系统才会从给出的路径,去找对应的包路径下的TextView.java。
演示的为:
这里写图片描述
然后我们点击OK,会发现代码出来了。
这里写图片描述
然后你继续跟进就可以了。

这个就是一个简单的调试,解决的是可以编译过的app.然而我们系统的app基本放在eclipse无法编译过的。下来我们来说这个怎么调试。

先说下调试依据:

eclipse调试代码,是不依赖代码是否编译过的,只依赖两个参数:一个是app包名,一个 是代码,我们就来演示测试下如何来调试系统settings里面的TextView.java

新建一个工程,将包名写为:com.android.settings
这里写图片描述

下一步下一步即可。
我们将我们工程里面的textView.java 复制过来,如下目录放置好(目录为包路径)

这里写图片描述

我们可以看到,这个是报错的,我们不管。我们在它的构造函数处打断点。(700多行)
下来我们直接去调试Settings即可。
在ec的菜单项找到Window,点击Show view 然后再点击最后的other,

这里写图片描述

选择这个,然后我们能看到这个列表:
这里写图片描述

我们找到Settings包,然后选中,点击右上面的那个虫子,因为我们有com.android.Settings包名的项目,因此便调试上了。
这里写图片描述
我们来启动Settings,看下是否能在TextView源码上。
事实如此,可以调试Settings代码了。系统里面的控件View都是可以直接打断的(因为这些控件View都是运行在Settings进程内部的)

好了,就到这里,应用调试就是如此简单。

4SystemProcess演示调试
我们演示下调试activity的启动过程即可.因为SystemProcess不是app进程,不能使用上面的方式调试,我们需要使用端口直接联调,下来我们开始操作。

新建一个java工程(这里强调,是个java 工程),名字随意,这里我写为Systemserver。

创建完成后,我们将
frameworks/base/services/core/java/com/android/server/am
复制到本地,在Systemserver这个工程下,创建一个目录,为am里面的包名(重点,包名)

这里写图片描述

最终显示如上,然后我们找到ActivityStarter.java,在里面的startActivityLocked函数打上断点。

关键部分来了:
我们在DDMS里面找到system_process(AMS运行在这个进程),去看下它的进程调试端口.
这里写图片描述
这里为8602,然后我们回到项目这边来,选中项目,点击右键,出来的选择debug as 继续选择debug Configurations,找到最后的Remote java Application, 点击它:
这里写图片描述
这里需要改下port 为我们上面记住的system process的端口号,这里为8602。
然后选择勾上Allow te……of remote VM

然后此时我们去DDMS去看,会发现我们的
这里写图片描述
前面有个虫子,则是调试上了。

此时我们运行随便启动一个activity,则会发现我们断点起作用了,被拦住。

这里写图片描述
这里写图片描述

此文就到这里。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员入门进阶

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值