#include <execinfo.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
const int STACK_BUF_SIZE = 100;
void *stack_buf[STACK_BUF_SIZE];
void func3(void) {
int k;
int n = backtrace(stack_buf, STACK_BUF_SIZE);
printf("%d addresses has return:\n", n);
backtrace_symbols_fd(stack_buf, n, STDOUT_FILENO);
printf("------------\n");
for (k = 0; k < n; ++k) {
printf("%lx\n", stack_buf[k]);
}
}
void func2() {
func3();
}
void func1() {
func2();
}
int main() {
func1();
return 0;
}
知道地址了,可以用addr2line得到相应函数相关信息
见#11:http://splayx.iteye.com/blog/1983210