#include<stdio.h>
#include<execinfo.h>
void foo(void)
{
printf("foo\n");
}
int main()
{
void *funptr=&foo;
backtrace_symbols_fd(&funptr,1,1);
return 0;
}
如上程序保存为test.c: 编译gcc -g -rdynamic test.c生成a.out可可执行文件。
执行程序: ./a.out 如下所示:
./a.out(foo+0x0)[0x40080d]
foo即为追溯到的函数名。
如何定位到行呢?
答:借助工具addr2line。
执行如下命令:
addr2line 0x40080d -e ./a.out
结果如下:
/home/linux/temp/func_point.c:5
直接定位到函数foo所在行。
函数使用方法请参考:http://man7.org/linux/man-pages/man3/backtrace.3.html