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程序员慢慢享用吧

更多相关文章

  1. 28、compileSdkVersion,minSdkVersion,targetSdkVersion 的区别和
  2. Android(安卓)数字证书详
  3. Android(安卓)Dev Tools>Development Settings
  4. Android启动过程 && Activity生命周期 && Activity开机自启动 &&
  5. 【Android(安卓)Linux内存及性能优化】(五) 进程内存的优化 - 线
  6. Android(安卓)Compile
  7. 如何加快Android(安卓)Studio 编译app 的速度
  8. 教你用电脑从 Google Play 下载 Android(安卓)程序 apk 文件
  9. Android(安卓)UI Operation in Thread

随机推荐

  1. Android Scroller的简单使用
  2. Android 之 Fast Scroll 、字母索引栏
  3. 截取android正在播放音乐的audio音频流(后
  4. 使用Android Studio调试Android Framewor
  5. Android插件开发机制
  6. Java利用Tomcat作为服务器与Android的Htt
  7. Android自动化测试“Adb connection Erro
  8. Android VCard联系人备份恢复(导入/导出)详
  9. Android文字转语音
  10. Android(安卓)- 数据存储 -在SQL数据库中