博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Linux中打印函数调用堆栈【原创】
阅读量:5838 次
发布时间:2019-06-18

本文共 1496 字,大约阅读时间需要 4 分钟。

本人学习笔记,代码参考如下网址

参考http://www.cnblogs.com/dma1982/archive/2012/02/08/2342215.html

zhangbh@prolin-srv:<~$> gcc -rdynamic -o my a.czhangbh@prolin-srv:<~$> ./my backtrace() returned 5 addresses ./my(my_func+0x1f)[0x40089c]./my(run+0x9)[0x4008e0]./my(main+0x14)[0x4008f6]/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f68032c7ec5]./my[0x4007b9]
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);

 

 

#include 
#include
#include
#include
void my_func(void){ int j, nptrs;#define SIZE 100 void *buffer[100]; char **strings; nptrs = backtrace(buffer, SIZE); printf("backtrace() returned %d addresses \r\n", nptrs); backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO);}void run(void){ my_func();}int main(int argc, char **argv){ run(); return 0;}

 

【作者】
【出处】
【博客园】
【新浪博客】
【知乎】
【我的作品---旋转倒立摆】
【我的作品---自平衡自动循迹车】
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
你可能感兴趣的文章
分拆VS整合,哪一个入口才能神庙逃生
查看>>
Mysql的一些操作
查看>>
第四次个人作业 -----alpha测试
查看>>
java不同安装包的安装方法(rpm,bin,tar)
查看>>
php页面编码设置详解
查看>>
如何将Outlook Express中的邮件从繁体系统转到简体系统
查看>>
if __name__=="__main__"
查看>>
存储基本知识
查看>>
我的友情链接
查看>>
selenium+python常用函数
查看>>
BadgeView
查看>>
Android Reverse Engineering
查看>>
我的友情链接
查看>>
insmod 和 modprobe使用方法
查看>>
跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)
查看>>
实现配置文件备份的小脚本
查看>>
shell变量的操作
查看>>
Entity Framework VS Mybatis 不同点剖析
查看>>
使用802.1X+FreeRadius+LDAP实现网络准入方案
查看>>
Apache Mina使用JSON数据进行通信的使用方法
查看>>