android 中的dumpsys

文章出处:https://blog.csdn.net/shift_wwx/article/details/42464293

请转载的朋友标明出处~~

 

首先来看一下dumpsys的source code:

path:frameworks/native/cmds/dumpsys

#define LOG_TAG "dumpsys"#include 
#include 
#include 
#include 
#include 
#include #include 
#include 
#include 
#include 
#include 
#include using namespace android;static int sort_func(const String16* lhs, const String16* rhs)
{return lhs->compare(*rhs);
}int main(int argc, char* const argv[])
{signal(SIGPIPE, SIG_IGN);sp sm = defaultServiceManager();fflush(stdout);if (sm == NULL) {ALOGE("Unable to get default service manager!");aerr << "dumpsys: Unable to get default service manager!" << endl;return 20;}Vector services;Vector args;bool showListOnly = false;if ((argc == 2) && (strcmp(argv[1], "-l") == 0)) {showListOnly = true;}if ((argc == 1) || showListOnly) {services = sm->listServices();services.sort(sort_func);args.add(String16("-a"));} else {if((argc == 2) && 0 == strcmp(argv[1], "list")){services = sm->listServices();services.sort(sort_func);const size_t N = services.size();aout << "Currently running services:" << endl;for (size_t i=0; i 1) {// first print a list of the current servicesaout << "Currently running services:" << endl;for (size_t i=0; i service = sm->checkService(services[i]);if (service != NULL) {aout << "  " << services[i] << endl;}}}if (showListOnly) {return 0;}for (size_t i=0; i service = sm->checkService(services[i]);if (service != NULL) {if (N > 1) {aout << "------------------------------------------------------------""-------------------" << endl;aout << "DUMP OF SERVICE " << services[i] << ":" << endl;}int err = service->dump(STDOUT_FILENO, args);if (err != 0) {aerr << "Error dumping service info: (" << strerror(err)<< ") " << services[i] << endl;}} else {aerr << "Can't find service: " << services[i] << endl;}}return 0;
}

 

从code中可以看到对参数的要求:

1. 当没有参数的时候会,list出所有的services,然后dump出来信息

2. 当参数是-l 或者是list的时候,只会list出所有的services

3. 当参数后面是service name的时候,会dump出service的信息

 

dumpsys -l:

  SurfaceFlingeraccessibilityaccountactivityalarmandroid.security.keystoreappopsappwidgetaudiobackupbatterybatterypropregbatterystatsclipboardcommontime_managementconnectivityconsumer_ircontentcountry_detectorcpuinfodbinfodevice_policydevicestoragemonitordiskstatsdisplaydreamsdrm.drmManagerdropboxentropyethernetgfxinfohardwareimage.playerinputinput_methodiphonesubinfoismslocationlock_settingsmbox_outputmode_servicemedia.audio_flingermedia.audio_policymedia.cameramedia.playermedia_routermeminfomountnetpolicynetstatsnetwork_managementnotificationpackagepermissionphonepowerpppoeprintprocstatssamplingprofilerscheduling_policysearchsensorserviceserialservicediscoverysimphonebooksipstatusbarsubtitle_servicesystem_writetelephony.registrytextservicesuimodeupdatelockusagestatsusbuservibratorwallpaperwifiwifip2pwindow


从code中,可以看出,

         else{services.add(String16(argv[1]));for (int i=2; i

将命令的第二个参数add到services,然后后面的都作为services的参数。

所以后面有点没看懂,为什么N会大于1?

最终所有的dump信息都是通过函数:

int err = service->dump(STDOUT_FILENO, args);

而这个service对象,是Ibinder类,所以其实可以看出来最终调用的是Ibinder类里面的dump函数,那么接下来就好办了。详细的binder机制,这里不再多说明。

 

下面来详细说明一下这个service。

1. meminfo

这个是比较常用的service,可以看一下:android 查看内存使用情况

 

2. cpuinfo

可以看一下:dumpsys cpuinfo

 

3. window

 

4. surfaceflinger

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部