首页 > 其他分享 >Android init常用调试工具

Android init常用调试工具

时间:2024-07-18 09:27:07浏览次数:23  
标签:shell 示例 init adb 进程 Android 调试


Android开机优化系列文档-CSDN博客

Android init常用调试工具

在 Android 开发中,调试 init 进程的性能问题和配置问题是提高系统启动效率和可靠性的关键任务。init 是 Android 系统中的第一个用户空间进程,负责启动系统服务、设置系统属性和处理启动任务。以下是 init 进程调试工具的详细介绍,包括工具的使用方法、命令示例和应用场景。

1. logcat

logcat 是 Android 系统中最常用的日志工具,可以用来查看 init 进程的输出日志,帮助识别启动过程中出现的问题。

使用方法
adb logcat | grep init

常见选项

  • -s:设置过滤器。

    adb logcat -s init:D
  • -d:将日志输出到控制台。

    adb logcat -d
  • -v:设置日志输出格式。

    adb logcat -v time

示例

查看 init 进程启动的日志信息:

adb logcat | grep "init"

2. dumpsys

dumpsys 是一个系统诊断工具,用于获取系统服务的状态信息,包括 init 进程的状态。

使用方法
adb shell dumpsys init
常见选项
  • -l:列出所有服务的状态。

    adb shell dumpsys init -l
  • -p:显示 init 进程的详细状态信息。

    adb shell dumpsys init -p
示例

获取 init 进程的服务状态:

adb shell dumpsys init

3. strace

strace 是一个系统调用追踪工具,可以帮助跟踪 init 进程的系统调用,识别性能瓶颈和调试问题。

使用方法
adb shell strace -p <init_pid> -tt
常见选项
  • -p:指定进程 ID。

    adb shell strace -p <init_pid>
  • -tt:显示时间戳。

    adb shell strace -tt -p <init_pid>
  • -e:指定要追踪的系统调用。

    adb shell strace -e trace=open,read,write -p <init_pid>
示例

查看 init 进程的系统调用:

adb shell strace -p 1 -tt

4. perf

perf 是一个性能分析工具,用于分析 init 进程的 CPU 使用情况和性能瓶颈。

使用方法
adb shell perf record -p <init_pid> -a
adb shell perf report
常见选项
  • record:记录性能数据。

    adb shell perf record -p <init_pid> -a
  • report:生成报告。

    adb shell perf report
  • top:实时性能监控。

    adb shell perf top
示例

记录并分析 init 进程的性能:

adb shell perf record -p 1 -a
adb shell perf report

5. trace

trace 是一个命令行工具,用于收集跟踪数据,查看系统和应用的事件。

使用方法
adb shell trace --start -c -p <init_pid>
# 执行需要跟踪的操作
adb shell trace --stop
常见选项
  • --start:开始跟踪。

    adb shell trace --start -c -p <init_pid>
  • --stop:停止跟踪。

    adb shell trace --stop
  • -c:收集 CPU 使用信息。

    adb shell trace --start -c -p <init_pid>
示例

开始跟踪 init 进程的活动:

adb shell trace --start -c -p 1
# Perform some operations
adb shell trace --stop

6. systrace

systrace 是一个更高级的性能分析工具,提供详细的系统级别的性能数据。

使用方法
adb shell atrace -b 4096 -t 10 -c -a init
常见选项
  • -b:设置缓冲区大小。

    adb shell atrace -b 4096
  • -t:指定跟踪时间。

    adb shell atrace -t 10
  • -a:指定要跟踪的进程。

    adb shell atrace -a init
  • -c:清除之前的跟踪数据。

    adb shell atrace -c
示例

init 进程进行系统级跟踪:

adb shell atrace -b 4096 -t 10 -c -a init

7. top 命令

top 命令可以动态地显示系统中进程的 CPU 和内存使用情况。

使用方法
adb shell top -d 1
常见选项
  • -d:设置刷新间隔。

    adb shell top -d 1
  • -p:只显示指定进程的信息。

    adb shell top -p <init_pid>
示例

实时查看 init 进程的资源使用情况:

adb shell top -d 1 -p 1

8. debugfs

debugfs 是一个高级文件系统调试工具,可以查看和修改文件系统的内容。虽然它主要用于文件系统层的调试,但有时可以帮助诊断 init 进程的文件系统相关问题。

使用方法
adb shell debugfs -R "ls" /dev/block/bootdevice/by-name/system
常见命令
  • -R:执行命令。

    adb shell debugfs -R "ls" /dev/block/bootdevice/by-name/system
示例

查看 system 分区中的文件:

adb shell debugfs -R "ls" /dev/block/bootdevice/by-name/system

9. dumpstate

dumpstate 是一个用于收集设备状态的工具,可以帮助诊断系统问题。

使用方法
adb shell dumpstate > dumpstate.txt
常见选项
  • -d:收集调试信息。

    adb shell dumpstate -d
  • -m:指定要收集的模块。

    adb shell dumpstate -m init
示例

收集 init 相关的系统状态信息:

adb shell dumpstate -m init > dumpstate_init.txt

10. ps 命令

ps 命令用于查看当前进程的状态。

使用方法
adb shell ps | grep init
常见选项
  • -A:显示所有进程。

    adb shell ps -p 1
  • -p:显示指定进程的信息。

    adb shell ps -p 1
示例

查看 init 进程的信息:

adb shell ps | grep init

11. busybox

busybox 提供了许多命令的简化版本,可以用来执行一些基本的调试任务。

使用方法
adb shell busybox
常见命令
  • ls:列出目录内容。

    adb shell busybox ls /system
  • cat:显示文件内容。

    adb shell busybox cat /system/etc/init.rc
示例

列出 /system 目录中的文件:

adb shell busybox ls /system

12. 示例调试步骤

以下是一个调试 init 进程缓慢操作的实际示例步骤:

1. 查看日志
adb logcat | grep init

2. 获取 init进程状态:
adb shell dumpsys init
3. 跟踪 init进程的系统调用:
adb shell strace -p 1 -tt
4. 记录 init进程的性能数据:
adb shell perf record -p 1 -a
adb shell perf report
5. 对 init进程进行系统级跟踪:
adb shell atrace -b 4096 -t 10 -c -a init
6. 实时监控 init进程的资源使用情况:
adb shell top -d 1 -p 1
7. 收集设备状态信息
adb shell dumpstate -m init > dumpstate_init.txt
8. 查看 system分区中的文件:
adb shell debugfs -R "ls" /dev/block/bootdevice/by-name/system

参考文献

参考链接

通过这些工具和方法,可以有效地调试 init 进程中的性能问题,识别缓慢操作的根本原因,并进行相应的优化。

标签:shell,示例,init,adb,进程,Android,调试
From: https://blog.csdn.net/netwalk/article/details/140497535

相关文章

  • Android开发 - 视图布局属性解析
    LinearLayout:主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件RelativeLayout:称作相对布局,非常常用的一种布局。和LinearLayout的排列规则不同,RelativeLayout显......
  • android开发基于Android10分析请求Zygote执行Fork一个新的应用程序的过程
    android开发基于Android10分析请求Zygote执行Fork一个新的应用程序的过程```ActivityTaskManagerService.activityPausedActivityStack.activityPausedLockedRootActivityContainer.resumeFocusedStacksTopActivitiesActivityStackSupervisor.startSpecificActivityLocked......
  • Doris failed to initialize storage reader. tablet=106408, res=[NOT_IMPLEMENTED_E
    ApacheDoris2.3以下的版本会存在一个bug,导致数据在合并时存在异常,在后续查询该字段数据时会提示[1105][HY000]:errCode=2,detailMessage=(192.168.15.228)[CANCELLED]failedtoinitializestoragereader.tablet=106408,res=[NOT_IMPLEMENTED_ERROR]tobeimplemen......
  • 针尖对麦芒!Anthropic 推出 Claude Android 可实时翻译!
    Anthropic,作为OpenAI的强劲对手,于本周二正式推出了专为Android用户设计的Claude应用程序,旨在通过拓宽Claude的接入平台,吸引用户从ChatGPT转向其服务。这款Android应用承袭了五月问世的iOS版本的设计理念,用户无需支付任何费用即可体验到Anthropic顶尖AI模型——Claude3.5Sonnet的......
  • Android |(十二)Glide v4 图片加载
    Github地址:https://github.com/bumptech/glide中文文档:Glidev4:快速高效的Android图片加载库一、添加依赖//settings.gradlerepositories{google()mavenCentral()}//build.gradle(app)dependencies{implementation("com.github.bump......
  • JetBrains家族| Android Studio快捷键
    一、JetBrainsIDE(一)什么是IDE?IDE,IntegratedDevelopmentEnvironment(集成开发环境)        是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套......
  • AndroidQ 打通应用层到HAL层---(HIDL服务实现)
    什么是HIDLHIDL全称为HALinterfacedefinitionlanguage(发音为“hide-l”)是用于指定HAL和其用户之间的接口的一种接口描述语言(IDL),AndroidO开始引入了HIDL这个概念,HIDL和应用层AIDL差不多,AIDL常用于连接App和Framework,HIDL则是用来连接Framework和HAL,AIDL使用Binder通信,HI......
  • jpa报错 Failed to initialize JPA EntityManagerFactory: Unable to instantiate de
    报错2024-07-1711:18:57.558[][main]o.h.dialect.Dialect:HHH000400:Usingdialect:org.hibernate.dialect.MySQL5InnoDBDialect2024-07-1711:18:57.729[][main]tyManagerFactoryBean:FailedtoinitializeJPAEntityManagerFactory:......
  • Android Studio下载Gradle超时解决方案
    本文由ChatMoney团队出品AndroidStudio找到项目中gradle配置文件的路径,我的路径为/你的项目路径/gradle/wrapper/gradle-wrapper.properties,里面对应内容应该如下所示:#TueJun1116:15:13CST2024distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distsdi......
  • Android Studio下载Gradle超时解决方案
    本文由ChatMoney团队出品AndroidStudio找到项目中gradle配置文件的路径,我的路径为/你的项目路径/gradle/wrapper/gradle-wrapper.properties,里面对应内容应该如下所示:#TueJun1116:15:13CST2024distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distsdi......