dumpstate类似于dumpsys都是android提供给开发者的帮助了解系统运行状态的利器。


从main函数看起:

1. 设置执行dumpstate这个命令的进程的一些属性

使它不会占用过多系统资源,即利用setpriority来告知内核它可以随时被调度

因为在手机系统信息,通过proc/self/oom_adj接口来告知内核(-17这是一个特殊的参数,详见man proc),在寻找可以被kill掉的进程时,忽略该进程。

/* set as high priority, and protect from OOM killer */
setpriority(PRIO_PROCESS, 0, -20);
FILE *oom_adj = fopen("/proc/self/oom_adj", "w");
if (oom_adj) {
fputs("-17", oom_adj);
fclose(oom_adj);
}


2. 如果有root权限,就可以从dalvik处获得各种dalvik提供的trace信息
利用了utils/中的dump_vm_traces函数,
其中通过proc/[pid]/exe的link的程序如果是app_process,再找到对应pid下的cmdline过滤掉根zygote,即得到所有由Android系统通过zygote所fork出来的所有的dalvik process(即各个APK)。
从这里可以看出,所有的APK都是由app_process这个应用从跟zygote所fork出来。
例如,
#ps
...
app_67 9986 172 99464 21012 ffffffff afd0c75c S com.keramidas.TitaniumBackup
app_80 9995 172 116304 32656 ffffffff afd0c75c S com.hiapk.marketpho
...

# ls -l /proc/9986/exe
lrwxrwxrwx 1 app_67 app_67 0 Oct 19 15:12 /proc/9986/exe -> /system/bin/app_process
# cat /proc/9986/cmdline
com.keramidas.TitaniumBackup#

3. 解析参数

中间一个有一个关于使用socket的参数值得看一下
它使用到了由init.rc中定义的专门给dumpstate使用的socket

service dumpstate /system/bin/dumpstate -s
socket dumpstate stream 0660 shell log
disabled
oneshot

相关启动各种系统service的init.rc的命令参见/init/readme.txt
相关的init.rc中的权限概念,参见http://blog.csdn.net/zmyde2010/article/details/6312615


4. 如果有root权限,拿到控制vibrator的权限和获得kernel启动的cmd参数
vibrator用来在dumpstate结束之后震动以提示用户。这是一个在嵌入式设备中常用的提示技巧,有时候也会用简单一个声音提示。
kernel的启动参数会在dump出来的信息中显示。

5. 根据dumpstate的参数做一些简单的准备,然后调用dumpstate()
关键的dumpstate函数
5.1 通过property_get获得一些从kernel cmdline及vendor提供的property信息(参见default.prop, build.prop中的预设值)
5.2 通过proc系统获得各种内存管理系统提供的信息(如, /proc/meminfo, top等等),其中利用了android提供的一个procrank命令获得制定进程的信息(参见我的另一篇文章,《Android性能分析工具之procrank》)
5.3 dump logcat中的信息和一些网络信息(netcfg, /proc/net/XXX下的内容)
5.4 dump 一些dalvik收集的trace信息
5.5 dump properties信息
5.6 各种通过sysfs接口暴露出来的kernel信息
5.7 vold, native packages, led灯等信息
5.8 调用dumpsys,显示dumpsys的信息

6. dumpstate()结束之后的一些后续处理(文件copy,压缩等等)


更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. android 模拟宏定义,实现Debug & Release 模式
  3. 使用Application Crash Reports for Android(ACRA)捕获Applicati
  4. AsyncTask异步任务学习笔记(一、异步任务加载网络图片(多图))
  5. Android客制化------开机拷贝文件到内置存储(2)
  6. ok6410 eclipse在线调试android程序
  7. android图形系统详解六:View layer
  8. android 系统
  9. Android学习系列(14)--App调试的几个命令实践

随机推荐

  1. android studio 3.3.2 NDK编译C++(C) JNI
  2. Android(安卓)7.1 从底层到上层分析 Led
  3. JPush 推送消息给 Android
  4. 初识android自定义UI
  5. android之通知的使用
  6. Android底部菜单栏(RadioGroup+Fragment)美
  7. Android(安卓)Studio TCP IP 服务器和客
  8. Android关于buildToolVersion与CompileSd
  9. android 侦听文件变化
  10. Android(安卓)Studio安装genymotion插件