使用__builtin_return_address(level)和objdump查找bug和宕机

原创 2012年03月27日 21:36:50

有些时候我们很难知道问题出在哪里,特别是类的析构,以及一些函数(调用这个函数的地方很多并且很频繁,不确定调用这个函数的堆栈)的调用,当我们去查找相应功能的代码问题时,如果简单的通过断点不好查找,就可以使用这个办法。

所以我们使用gcc的编译特性使用__builtin_return_address(level)打印出一个函数的堆栈地址。其中level代表是堆栈中第几层调用地址,__builtin_return_address(0)表示第一层调用地址,即当前函数,__builtin_return_address(1)表示第二层。如代码

#define __built_in_return_address(x) t(x)

void f()

{

     print("%p,%p" , t(0), t(1));

}

void g()

{

      f();

}

分别打印出函数f()和g() 的函数地址,我们通过objdump 出来的文件去查找打印出来的函数地址,这样就能看到调用的函数名了。


使用__builtin_return_address获得程序运行栈情况

1、gcc默认不支持__builtin_return_address(LEVEL)的参数为非0。好像只支持参数为0。 2、__builtin_return_address(0)的含义是,得到当前函数...
  • bin_linux96
  • bin_linux96
  • 2014年09月24日 20:00
  • 885

GCC内建函数 __builtin_return_address实现

GCC内建函数 __builtin_return_address实现 内建函数 __builtin_return_address 返回当前函数或其调用者的返回地址,参数 LEVEL 指定在栈上搜索...
  • dayancn
  • dayancn
  • 2015年09月05日 11:31
  • 1087

用__builtin_return_address获得程序运行栈情况

#include #include #include #define MAX_LEVEL 4 void sigfunc(int signo) { printf("%s(0): %p\n...
  • vpwork
  • vpwork
  • 2012年06月20日 16:03
  • 2225

取得函数调用栈 - __builtin_frame_address

取得函数调用栈 - __builtin_frame_address (2007-08-08 13:39) 分类: 库,内存,性能,系统 GCC提供了两个内置函数用来在运行时取得函数调用栈中...
  • gujing001
  • gujing001
  • 2011年10月17日 20:02
  • 4027

如何查看程序的运行栈 之 __builtin_return_address的使用

针对大型软件中,
  • kehyuanyu
  • kehyuanyu
  • 2014年05月14日 21:07
  • 844

__builtin_return_address/_RET_IP_/_THIS_IP_

GCC内建函数 __builtin_return_address http://www.360doc.com/content/12/0828/17/9336047_232846513.shtml ...
  • adaptiver
  • adaptiver
  • 2013年05月31日 16:15
  • 3164

linux下打印函数调用栈(stack backtrace in Linux)

linux下打印函数调用栈(stack backtrace in Linux) 2010-01-14 23:20 今天遇到个这样的需求,希望...
  • qiushanjushi
  • qiushanjushi
  • 2013年05月14日 15:14
  • 702

使用__builtin_return_address(level)和objdump查找bug和宕机

有些时候我们很难知道问题出在哪里,特别是类的析构,以及一些函数(调用这个函数的地方很多并且很频繁,不确定调用这个函数的堆栈)的调用,当我们去查找相应功能的代码问题时,如果简单的通过断点不好查找,就可以...
  • apengjiang
  • apengjiang
  • 2012年03月27日 21:36
  • 4390

将gcc下的程序移植到MSVC下 之二 - __builtin_return_address的实现

内建函数 __builtin_return_address 返回当前函数或其调用者的返回地址,参数LEVEL 指定在栈上搜索框架的个数,0 表示当前函数的返回地址,1 表示当前函数的调用者的返回地址,...
  • celestialwy
  • celestialwy
  • 2006年10月23日 09:11
  • 2923

代码优化,WINDOWS下使用DUMPBIN提取DLL文件中的符号

一个跨平台软件,其中有一段代码,需要从动态链接库中提取出匹配指定规则的符号,在Linux中,使用了objdump对.so文件进行反汇编,提取符号,但在Windows当中,由于没有objdump,虽然有...
  • crazyingBird
  • crazyingBird
  • 2016年07月06日 22:44
  • 1232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用__builtin_return_address(level)和objdump查找bug和宕机
举报原因:
原因补充:

(最多只允许输入30个字)