如何根据binder client端查找binder server端?

当遇到SWT问题时,分析binder通信是关键。通过 SYS_BINDER_INFO 和 SWT_JBT_TRACES 文件,利用'outgoing transaction'关键字找到binder client与server间的交互。如果常规方法无效,可在kernel_log中查找binder release日志,通过debug_id定位对端信息。若server端显示为670:0或0:0,分别表示无空闲binder或进程已挂掉,需进一步调查binder server状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发生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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值