linux kernel通过堆栈地址查询对应源代码的行

有如下kernel堆栈

     0.121647:   <6> CPU: 2 PID: 1 Comm: swapper/0 Not tainted 3.18.31-perf-g7b45103 #1
     0.121657:   <6> Hardware name: Qualcomm Technologies, Inc. MSM8940-PMI8950 MTP (DT)
     0.121667:   <6> Call trace:
     0.121682:   <2> [<ffffffc000089ba8>] dump_backtrace+0x0/0x23c
     0.121696:   <2> [<ffffffc000089df8>] show_stack+0x14/0x1c
     0.121711:   <2> [<ffffffc000d27dbc>] dump_stack+0x80/0xa4
     0.121727:   <2> [<ffffffc0000a2f34>] warn_slowpath_common+0x8c/0xb0
     0.121741:   <2> [<ffffffc0000a3070>] warn_slowpath_null+0x18/0x20
     0.121754:   <2> [<ffffffc00148e5c8>] msm_pm_boot_init+0x90/0xd0
     0.121767:   <2> [<ffffffc000082ae4>] do_one_initcall+0x18c/0x1a8
     0.121781:   <2> [<ffffffc00144bcdc>] kernel_init_freeable+0x318/0x3c4
     0.121796:   <2> [<ffffffc000d20910>] kernel_init+0x14/0xe4
     0.121813:   <6> ---[ end trace 2d5d27f65eb33aa7 ]---

现在想通过堆栈地址获得对应源代码的行号,方法如下:
1) 堆栈地址为绝对地址
方法:addr2line -e vmlinux [地址]
示例:
在这里插入图片描述
2) 只有函数名+偏移地址
方法:通过“nm vmlinux | grep [函数名]”获得函数的地址,再加上偏移地址,则得到堆栈的绝对地址,然后再用第一种情况获得代码行
示例:
在这里插入图片描述
可以发现kernel_init_freeable的起始地址为ffffffc00144b9c4,加上其在堆栈中的偏移地址0x318,则得到其绝对地址为ffffffc00144bcdc,与堆栈中的绝对地址相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值