九阳神功爱喝茶 发表于 2015-12-09 12:29

有没有直接查看出一个C函数其汇编代码行数的工具?

在linux内核发生oops的时候经常会出现 EIP: [<f82d2005>] hello_init+0x5/0x11
问题出现在hello_init函数的汇编代码的第五行,函数一共11行,这个时候用objdump 反编译获得C函数的和会变函数的对照表,我觉得这个有点麻烦,能不能直接得出二者之间的对应关系表?求解各位大神

firocu 发表于 2015-12-09 15:01

本帖最后由 firocu 于 2015-12-09 15:01 编辑

这是Al Viro的一个debug oops流程:-)
yarchive.net/comp/linux/oops_decoding.html

Godbach 发表于 2015-12-09 15:34

回复 1# 九阳神功爱喝茶

有个 addr2line 可以转换。

此外,本版精华帖汇总,也有如何定位 Oops 的介绍,你看一下。

   

九阳神功爱喝茶 发表于 2015-12-09 15:41

好的,谢谢版主回复 3# Godbach


   

九阳神功爱喝茶 发表于 2015-12-09 15:41

谢谢,我来看看回复 2# firocu


   

九阳神功爱喝茶 发表于 2015-12-11 10:18

用了一下,蛮好用的。编译的时候加上-g选项;OOPS之后直接objdump -S XXX.o 即可获取汇编和C语言的同时编码对照

Godbach 发表于 2015-12-11 10:46

回复 6# 九阳神功爱喝茶

是的, objdump 也是可以的。此外,也可以多了解一下汇报。尤其是错误在函数开始或者结尾的,基本上通过汇报,也可以大致判断程序中对应的位置。


   

Buddy_Zhang1 发表于 2015-12-23 19:23

面对 OOPS 问题使用 vmlinux 进行调试简直是轻松加愉快
页: [1]
查看完整版本: 有没有直接查看出一个C函数其汇编代码行数的工具?