在实际调试程序时,往往需要知道函数的调用关系,尤其是在阅读一些开源代码或者linux kernel程序时,打印出函数的调用栈有助于我们从整体上把握代码框架结构。linux提供了三个函数帮助我们打印函数调用栈。
/*
* 函数说明: 取得当前函数的调用堆栈
* 参数:
* buffer:用于存储函数地址的数组
* size:buffer数组的长度
* 返回值:
* 存储到数组中的函数个数
*/
int backtrace(void **buffer, int size);
/*
*
* 函数说明:将一组函数地址转换为字符串
* 参数:
* buffer: 经由backtrace得到的函数地址
* size: buffer数组的长度
* 返回值:
* 函数在系统中对应用字符串
*/
char **backtrace_symbols(void *const *buffer, int size);
/*
* 函数说明:将一组函数地址转换为字符串
* 参数:
* buffer: 经由backtrace得到的函数地址
* size: buffer数组的长度
* fd: 输出结果文件描述符
*/
void backtrace_symbols_fd(void *const *buffer, int size, int fd);
针对上面三个函数,进行了如下的封装,可以直接调用以下
Linux下打印函数调用栈的方法

本文介绍了在Linux中如何使用backtrace、backtrace_symbols和backtrace_symbols_fd三个函数来打印函数调用栈,这对于理解和调试代码的执行流程非常有帮助。通过示例代码展示了如何封装这些函数以方便在需要时输出调用栈信息。
最低0.47元/天 解锁文章
2167

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



