分析线程问题的笔记

背景

Android应用开发过程中,主线程的问题通常比较好处理,主线程拥有ANR机制,ANR有详细的栈信息。
但子线程是允许长时间睡眠的,但也存在子线程不明原因导致一直在睡眠的情况。
必要时需要对线程问题进行分析,例如:游戏引擎等使用到GL主线程,GL主线程画面卡死了,一般遇到这种情不知道如何下手分析,况乱猜原因的比较多;

可利用的工具笔记

除了会打Log,可以利用现成工具尽可能的获取线程信息;
备注:packageName代表包名,pid代表进程id,pid代表线程id;

  1. 获取进程号pid
adb shell ps | grep packageName | awk '{print $2}'
  1. 列出进程的所有线程
adb shell ps -T -p pid
  1. 实时监控进程的线程调度情况
adb shell top -H -p pid
  1. 查看线程的调度情况
adb shell cat /proc/pid/task/tid/sched

其中时间字段展示的单位为微妙(小数点前),小数点后面部分展示到纳米;

  1. 查看线程的栈(但不能展示虚拟机层的栈信息)
adb shell cat /proc/pid/task/tid/stack

另外:/proc/pid/task/tid/目录还有其他的信息可利用;

  1. [有Root权限]获取进程的所有线程栈信息
adb root
adb shell debuggerd -j pid
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容