写作目的:由于搜backtrace时,一堆又生又涩的原理解析,让脑容量只有几KB的我很是头大,所以写了一个简单实用的案例,话不多说,上菜!
backtrace是回溯的意思,就是将程序在堆栈上运行的信息,都记录在小本本上了,哦,不是,是直接打印出来了。
1.代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <execinfo.h>
void printf_backtrace(void)
{
int size = 16;//堆栈的最大size
void* buf[size];//定义用于存放获取到堆栈信息的指针数组
int stackNum = backtrace(buf, size);//返回获取到的实际堆栈信息指针数
char** stackStr = backtrace_symbols(buf, stackNum);//将buf中存放的信息转换为可打印的字符串信息
for (int i = 0; i < stackNum; i++)
{
printf("stackNum:[%02d] stackStr:%s\n", i, stackStr[i]);
}
free(stackStr);//释放一整块存放信息的字符串内存
}
int main()
{
printf_backtrace();
return 0;
}
2.在需要的地方添加printf_backtrace()即可;
3.需要用addr2line或者c++filt 解析字符串,得到函数名,搞定收工。
友情链接
目前看到最好的是这两个:
Linux下通过backtrace获取程序崩溃前堆栈信息_Ccccxc的博客-CSDN博客_linux获取堆栈信息
其次是这两个:
在Linux中如何利用backtrace信息解决问题_jxgz_leo的博客-CSDN博客_backtrace linux