Chinaunix首页 | 论坛 | 博客
  • 博客访问: 271598
  • 博文数量: 42
  • 博客积分: 485
  • 博客等级: 下士
  • 技术积分: 482
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-26 19:33
文章分类
文章存档

2017年(1)

2016年(4)

2015年(8)

2014年(3)

2013年(4)

2012年(3)

2011年(19)

我的朋友

分类: LINUX

2011-06-21 09:58:12

在查内核驱动的音频bug时,好几次因为函数指针的引用不最终不知是哪个函数调用了当前函数(如.hw_params=XXX_XX_hw_params,然后好多地方调用hw_params就囧了)。幸好,找到了这个工具,志之:
在当前函数的任何地方调用__builtin_return_address(0)并printk返回值,在运行后得到返回值0xc1234568,再用这个值从目标文件中查找到对应的符号(arm-linux-addr2line 0xc1234568 -e vmlinux -f),此符号即为调用当前函数的调用者的函数名。
 
PS:网络上找到说,可以用__builtin_return_address(1)、(2)...返回更高层次调用函数的地址,为什么我用的时候返回的更高层次调用函数的地址都是0呢,要是能这么用就免去多次编译测试的步骤,多好呀。望有高手,高抬贵手指教一二,多谢。
 
PS2:坛子里给出了更给力的办法,调用:dump_stack();
阅读(5348) | 评论(0) | 转发(0) |
0

上一篇:traceback调试

下一篇:INIT_WORK和container_of

给主人留下些什么吧!~~