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;
}
本文介绍了一个简单的C程序,该程序利用glibc提供的backtrace函数来打印当前进程的调用堆栈信息。通过这个示例,读者可以了解到如何在C程序中实现调用堆栈的获取与解析。
2175

被折叠的 条评论
为什么被折叠?



