发生SWT时,backtrace经常会卡在binder client端等待binder server端返回:
IPCThreadState::waitForResponse-->IPCThreadState::talkWithDriver
需要找到server端的pid才能进行下一步分析
方法一:常规方法
根据binder client thread的sysTid在SYS_BINDER_INFO/SWT_JBT_TRACES中查找binder通信对端,关键字“outgoing transaction”:
SYS_BINDER_INFO / SWT_JBT_TRACES中可以查看binder信息
Outgoing: Current thread is performing binder request to other process
Incoming: Current thread is performing binder service for other process
方法二:如果在SYS_BINDER_INFO中无法找到binder对端信息怎么办?
可以尝试在kernel_log中查找binder release的log(binder所在进程结束时会调用),找到
debug_id再进行下一步定位,例如:
kernel_log
[ 543.692215] .(6)[6750:kworker/6:1]binder: release 1035:1035 transaction 257798 out, still active
debug_id是257798,之后根据debug_id对应查找SYS_BINDER_INFO可以找到对端信息:
//SYS_BINDER_INFO:
//此处可以看到binder server端是670:0, 与binder server端通信的是1035进程
proc 670
context binder
thread 670