android strace调试

本文介绍了如何使用strace工具来跟踪Android应用的系统调用,包括编译配置、跟踪进程的方法及重定义service来进行全程跟踪。此外还讨论了selinux权限的相关设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译strace

加入编译选项到device.mk:


PRODUCT_PACKAGES += strace

触发编译:


mmma -j6 external/strace

跟踪进程



adb shell strace -f -p PID

-p代表跟踪进程号为PID的进程,-f代表跟踪该进程以及之后fork生成的所有进程。

如果想要把strace的log输出到指定的文件可以使用:


adb shell strace -f -p PID -o file 

-o file选项将会把strace log输出到file中,而不是stderr中。

追踪Android应用的方法

首先需要放开selinux权限,当selinux权限不满足要求时无法进行strace:


adb shell setenforce 0

Android apps其实都是由zygote进程fork来的,所以我们如果要strace一个app,可以通过-f -p指定到zygote对应的进程,就可以跟踪到对应的所有子进程。


example:

sdm660:/ # ps -A | grep zygote                                                 

root           959     1 4247260  74288 poll_schedule_timeout 0 S zygote64

root           960     1 1577152  65916 poll_schedule_timeout 0 S zygote

webview_zygote 1817    1 1338924  32124 poll_schedule_timeout 0 S webview_zygote32

sdm660:/ # strace -f -p 959 -tt -T -s 500 -o /sdcard/strace.txt

strace: Process 959 attached with 5 threads

重新封装service

如果想要从service启动时就开始进行strace,可以通过在init.rc中重新定义service来做。

比如:


-service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
+service zygote /system/xbin/strace -o /data/local/tmp/zygote.strace /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

类似上面的方式,zygote的进程名已经修改为了strace,那么还要保证strace具有相应的selinux的权限,在这里不再进一步展开说明。

或者我们把selinux设置为permissive,在cmdline中添加参数androidboot.selinux=permissive。配置方法如下:

BoardConfig.mk:


BOARD_KERNEL_CMDLINE:=(省略......)androidboot.selinux=permissive
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值