linux kernel通过堆栈地址查询对应源代码的行
2017-04-06 16:46
225 查看
有如下kernel堆栈
现在想通过堆栈地址获得对应源代码的行号,方法如下:
堆栈地址为绝对地址
方法:addr2line -e vmlinux [地址]
示例:
只有函数名+偏移地址
方法:通过“nm vmlinux | grep [函数名]”获得函数的地址,再加上偏移地址,则得到堆栈的绝对地址,然后再用第一种情况获得代码行
示例:
可以发现kernel_init_freeable的起始地址为ffffffc00144b9c4,加上其在堆栈中的偏移地址0x318,则得到其绝对地址为ffffffc00144bcdc,与堆栈中的绝对地址相同。
0.121647: <6> CPU: 2 PID: 1 Comm: swapper/0 Not tainted 3.18.31-perf-g7b45103 #1 0.121657: <6> Hardware 4000 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 ]---
现在想通过堆栈地址获得对应源代码的行号,方法如下:
堆栈地址为绝对地址
方法:addr2line -e vmlinux [地址]
示例:
只有函数名+偏移地址
方法:通过“nm vmlinux | grep [函数名]”获得函数的地址,再加上偏移地址,则得到堆栈的绝对地址,然后再用第一种情况获得代码行
示例:
可以发现kernel_init_freeable的起始地址为ffffffc00144b9c4,加上其在堆栈中的偏移地址0x318,则得到其绝对地址为ffffffc00144bcdc,与堆栈中的绝对地址相同。
相关文章推荐
- (转)通过地址获取对应的源代码信息
- 通过地址获取对应的源代码信息收藏
- 通过地址获取对应的源代码信息
- [转贴]仅通过崩溃地址找出源代码的出错行
- [转]仅通过崩溃地址找出源代码的出错行
- 仅通过崩溃地址找出源代码的出错行
- 对“仅通过崩溃地址找出源代码的出错行”一文的补充与改进
- 仅通过崩溃地址找出源代码的出错行
- 制作通过IP 查询地址的java版程序
- 转:仅通过崩溃地址找出源代码的出错行
- 对“仅通过崩溃地址找出源代码的出错行”一文的补充与改进
- 仅通过崩溃地址找出源代码的出错行
- 仅通过崩溃地址找出源代码的出错行
- 仅通过崩溃地址找出源代码的出错行(作者:老罗)
- 转贴:对“仅通过崩溃地址找出源代码的出错行”一文的补充与改进
- 仅通过崩溃地址找出源代码的出错行
- 对“仅通过崩溃地址找出源代码的出错行”一文的补充与改进
- 仅通过崩溃地址找出源代码的出错行
- 通过崩溃地址找出源代码的出错行
- 仅通过崩溃地址找出源代码的出错行