android 调试利器之 strace


strace 是linux下的调试利器;debug居家必备

strace可以跟踪所有的系统调用,打印系统调用的参数和返回值; strace还可以指定跟踪子线程/子进程,这是调试多线程程序必须的;


andriod 使用了linux操作系统,strace当然是好用的;


strace本身不依赖于系统,从一个机器拷贝到另一个机器直接能用;可以看到,strace 只依赖三个最基本的库:

> readelf -a strace | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]

strace一般在/system/xbin/或者/system/bin/下;如果没有呢,可以自己编译一个,或者从其它android手机拷贝一份


linux上,strace一般有两种用法:

a. strace <elf_file>    启动程序的同时,用strace跟踪;

b. strace -p pid    对于已经启动的程序,通过-p参数可以attach上去跟踪之后的执行流程;


android上使用strace有一点特殊,android上所有android application都是通过zygote fork出来的;(这是android的一大特点,即既节约内存,又能加快程序启动时间,这里不展开)


所有android application进程的父亲都是zygote;

strace <elf_file> 显然对不能用来跟踪android application.(因为它们都是fork来的)

我们可以使用strace的特性:a) attach到现有进程,b) 允许跟踪子进程;

做法就是跟踪zygote和它的儿子;

  先得到zygote的pid,再执行 strace -f -p <pid_of_zygote>,然后启动要跟踪调试的程序; 

  其中-f 代表跟踪子进程;而且是之后生成的子进程,之前已经运行起来的android application不会被跟踪到;

可以用一条命令包括前两部:

  strace -f -p `ps | grep zygote | awk '{print $2}'`

就是这么简单,debug的android程序员慢慢享用吧

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值