在Linux中打印函数调用栈

在实际调试程序时,往往需要知道函数的调用关系,尤其是在阅读一些开源代码或者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);

针对上面三个函数,进行了如下的封装,可以直接调用以下代码,通过定义宏控制是否调用。

#ifdef  __DEBUG_CALL_STACK__

#define DEBUG_MSG_1(fm

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值