Linux内核调试方法总结之dumpsys

come from : https://www.cnblogs.com/justin-y-lin/p/5424598.html

dumpsys

【用途】Android系统提供的dumpsys工具可以用来查看系统服务信息与状态。

【使用说明】

adb shell dumpsys <service> [<option>]

【常用服务解释】

编号

服务名称

功能

1

account

扫描二维码关注公众号,回复: 5515438 查看本文章

显示accounts信息

2

activity

显示所有的activities信息,包括activity栈,栈顶activity等

3

cpuinfo

显示CPU信息,系统各进程的CPU使用率

4

window

显示键盘、窗口和他们的关系。获取当前应用的component

5

wifi

显示wifi信息

7

package

获取安装包信息 package   $package_name

8

usagestats

每个界面的启动时间

9

statusbar

显示状态栏相关的信息

10

meminfo

显示内存信息。meminfo   $package_name or $pid显示指定程序内存信息

11

diskstats

显示磁盘相关信息

12

battery

显示电池信息

13

alarm

显示应用持锁情况,可用于分析系统无法待机的问题以及应用层死锁问题

14

input

显示InputReader和InputDispatcher消息队列,底层事件一般通过inputevent的方式上报,通过查看消息队列,可以判断冻屏时内核是否正常(adb shell setprop sys.input.debug 1打开debug信息)

【代码实现】

dumpsys代码在frameworks/base/cmds/dumpsys/dumpsys.cpp

所有dump信息都是由重载了Binder的dump函数的类来完成:

@Override

protected void dump(FileDescriptor fd, PrintWriter pw, String[] args){

         //TODO: xxxx

}

所有dump信息都是由ServiceManager注册的services提供的,以meminfo为例:

frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函数中注册meminfo服务:

         ServiceManager.addService(“activity”, m);

         ServiceManager.addService(“meminfo”,new MemBinder(m));

MemBinder->ProcessRecord->各个正在运行状态的ApplicationThread的状态(frameworks/base/core/java/android/app/ActivityThread.java),从中得到需要的meminfo的信息。

猜你喜欢

转载自blog.csdn.net/zmjames2000/article/details/88410353