https://www.cnblogs.com/sky-heaven/p/5889612.html
gcc myfun.c -o myfun -rdynamic
#include <stdio.h>
#include <execinfo.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 100
void my_func(void)
{
int i, nptrs;
void *buffer[100];
char **strings;
nptrs = backtrace(buffer, SIZE);
printf("backtrace() returned %d addresses \r\n", nptrs);
strings = backtrace_symbols(buffer, nptrs);
for(i = 0; i < nptrs; i++)
printf("[%d]%s\n", i, strings[i]);
backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO);
}
void run(void)
{
my_func();
}
int main(int argc, char **argv)
{
run();
return 0;
}