查看kernel调用栈对应的代码行号

我们在分析watchdog问题时经常会遇到D状态的线程,然后它的调用栈如下:

"ActivityManager" prio=5 tid=11 Native
| group="main" sCount=1 dsCount=0 obj=0x12c567e0 self=0x7f77a35a00
| sysTid=2180 nice=-2 cgrp=default sched=0/0 handle=0x7f7ced0450
| state=D schedstat=( 19976991567 5871715712 18344 ) utm=1038 stm=959 core=3 HZ=100
| stack=0x7f7cdce000-0x7f7cdd0000 stackSize=1037KB
| held mutexes=
kernel: __switch_to+0x70/0x7c
kernel: binder_ioctl+0x1a8/0x5e8
kernel: do_vfs_ioctl+0x484/0x558
kernel: SyS_ioctl+0x5c/0x88
kernel: cpu_switch_to+0x48/0x4c
native: (backtrace::Unwind failed for thread 2180: Thread has not repsonded to signal in time)
at android.os.BinderProxy.transactNative(Native method)
at android.os.BinderProxy.transact(Binder.java:620)
at android.app.ApplicationThreadProxy.scheduleRegisteredReceiver(ApplicationThreadNative.java:1224)
at com.android.server.am.BroadcastQueue.performReceiveLocked(BroadcastQueue.java:492)
at com.android.server.am.BroadcastQueue.deliverToRegisteredReceiverLocked(BroadcastQueue.java:707)
at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:836)
- locked <0x0b8e329d> (a com.android.server.am.ActivityManagerService)
at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:804)
at com.android.server.am.BroadcastQueue$BroadcastHandler.handleMessage(BroadcastQueue.java:178)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.android.server.ServiceThread.run(ServiceThread.java:46)

这里我们能看得出来这里是卡在了binder_ioctl方法中,但是具体卡在这个方法的什么地方我们是看不出来的,那么我们怎么找到对应的行号呢?


第一步:

 下载对应代码的symbols,并解压.我这里用的是libra_symbols_7.12.8_7.0_99cc23c6f1_g35e222b.tgz,symbols的下载地址在:http://eng.pt.miui.com/?r=eng&dir=/symbols

第二步:

 在源码目录下运行gdb可执行文件:~/AndroidCode/C1-O/prebuilts/gdb/linux-x86/bin$ ./gdb

第三步:

 加载vmlinux,vmlinux在symbols中,具体路径在out/target/product/libra/obj/KERNEL_OBJ/下

 file /home/mi/xiaomiwork/LOG/surfaceflinger/C8/培训/out/target/product/libra/obj/KERNEL_OBJ/vmlinux-35e222b

第四步:

 list *binder_ioctl+0x1a8

 0xffffffc000a373f4 is in binder_ioctl (/home/work/libra-n-dev-build/kernel/drivers/android/binder.c:437)

第四步结束后我们就能够得到对应的代码行号了,我们可以看下对应的代码它卡在了哪里:



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值