Use faddr2line on android

android使用faddr2line

Image credit: Unsplash

当我们在用systrace分析系统情况时,会发现线程出现一些红色或者黄的情况,如果开了sched_blocked_reason追踪的话是可以获得阻塞的具体位置,如下图。

image-20231019095512846

关于0x53c和0x5ec的含义:https://stackoverflow.com/questions/10171984/how-to-make-good-use-of-stack-trace-from-kernel-or-core-dump。53c是偏移地址,0x5ec是函数的大小。

但是如果进一步分析do_page_fault+0x53c/0x5ec是源文件的哪一行,则需要faddr2line工具。该工具实际上是一个脚本,通过使用readelfawkaddr2line来定位函数。

由于之前我编译过源代码,所以我的vmlinuxfaddr2line都可以找到,我也尝试通过在android上寻找boot.img来提取vmlinux的方法,但是没成功,所以就不在这里叙述了。

  • 我的vmlinux路径:out/android-msm-pixel-4.9/private/msm-google/vmlinux

  • 我的faddr2line路径:private/msm-google/scripts/faddr2line

由于我之前装bcc的时候是将一个debian环境“安装”在了手机上,因此上面已经有了这三个工具,原生的adb shell中貌似没有addr2line

  1. push两个文件到手机中
  2. 执行命令faddr2line vmlinux do_page_fault+0x53c/0x5ec
QianLong Sang
QianLong Sang
Second Year CS Phd

My research interests include operating system, computer architecture and computer security.