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

来源:互联网 发布:网络编程入门书籍 编辑:程序博客网 时间:2024/05/16 17:22

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

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


原创粉丝点击