backtrace是 Linux 系统提供的一个库函数,使用时需要引入头文件exeinfo.h,这个函数不属于 C/C++ 标准且是 Linux 独有的 API,其主要功能是追踪程序的执行路径,并返回函数调用栈中的信息,借助这些信息可以帮助我们快速分析程序的执行顺序。
函数原型
在 Linux 系统下,使用man命令可以很快捷的查询该 API 的用法:
1
$ man backtrace
我们会得到三个对应的 API:
1 2 3 4 5
#include<execinfo.h>
intbacktrace(void **buffer, int size); char **backtrace_symbols(void *const *buffer, int size); voidbacktrace_symbols_fd(void *const *buffer, int size, int fd);
这里我们只介绍前两个。
backtrace
1
intbacktrace(void **buffer, int size);
函数功能:得到函数的调用栈信息,在那个函数体内就得到那个函数的调用栈信息。 参数含义:
buffer 是一个二级指针,用于接收返回的函数调用栈信息。
size 用于设置 buffer 所接收的调用栈信息的最大深度。 说明:
为了避免丢失一些信息,这个值一般需要大于等于函数调用栈的深度。
函数返回值表示 buffer 所接收的调用栈信息的深度,这个值小于等于 size。
backtrace_symbols
1
char **backtrace_symbols(void *const *buffer, int size);