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

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

所以我们使用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 出来的文件去查找打印出来的函数地址,这样就能看到调用的函数名了。


阅读更多
文章标签: gcc
个人分类: Linux c/c++
上一篇数据服务器/平台服务器
下一篇NpcServer设计
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭