在头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。
int backtrace(void **buffer,int size);
在buffer中的指针实际是从堆栈中获取的返回地址,每一个堆栈框架有一个返回地址。
char ** backtrace_symbols (void *const *buffer, int size);
注意:该函数的返回值是通过malloc函数申请的空间,因此调用者必须使用free函数来释放指针.如果不能为字符串获取足够的空间函数的返回值将会为NULL。
void backtrace_symbols_fd (void *const *buffer, int size, int fd)
应用举例:
#include<signal.h>
#include<stdio.h>
#include<execinfo.h>
#include<stdlib.h>
void sigdump(int s)
{
}
int main()
{
}
执行结果如下:
wd@wd-Lenovo:~/forktest/segfault$ ./main
Obtained 5 stack frames.
./main() [0x804853d]
[0xb77a4400]
./main() [0x80485e5]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0xb76054d3]
./main() [0x8048491]