免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 22941 | 回复: 12
打印 上一主题 下一主题

[函数] c中如何打印函数调用堆栈? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-17 20:06 |只看该作者 |倒序浏览
如题
如何在一个函数中打印出来调用它的上一级函数名称?
比如在做内存泄漏检测的时候,发现只打印分配内存点的信息还不够,因为有时候有多个流程同时调用一个地方分配内存,最好能是象gdb那样打印出函数调用的堆栈来更方便一些。
如果是c++还能想到用抛出异常来尝试一下,c里面有什么好方法么?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-06-17 20:18 |只看该作者
原帖由 feasword 于 2007-6-17 20:06 发表
如题
如何在一个函数中打印出来调用它的上一级函数名称?
比如在做内存泄漏检测的时候,发现只打印分配内存点的信息还不够,因为有时候有多个流程同时调用一个地方分配内存,最好能是象gdb那样打印出函数调用的 ...

何不直接参考 gdb 的源码?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2007-06-17 20:23 |只看该作者
原帖由 feasword 于 2007-6-17 20:06 发表
如题
如何在一个函数中打印出来调用它的上一级函数名称?
比如在做内存泄漏检测的时候,发现只打印分配内存点的信息还不够,因为有时候有多个流程同时调用一个地方分配内存,最好能是象gdb那样打印出函数调用的 ...

  1. func1(....)
  2. {
  3. .....
  4. #ifdef MYFEBUG
  5.      func2(....,__func__);
  6. #endif
  7. ....
  8. }
  9. #ifdef MYFEBUG
  10. func2(....,const char* funcname)
  11. #else
  12. func2(...)
  13. #endif
  14. {
  15. #ifdef MYFEBUG
  16.        printf("%s:%s\n",__func__,funcname);
  17. #endif
  18. ....
  19. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2007-06-17 22:47 |只看该作者
原帖由 feasword 于 2007-6-17 20:06 发表
如题
如何在一个函数中打印出来调用它的上一级函数名称?
比如在做内存泄漏检测的时候,发现只打印分配内存点的信息还不够,因为有时候有多个流程同时调用一个地方分配内存,最好能是象gdb那样打印出函数调用的 ...



可以参考strace,我好像还用过一个什么trace。。。。的

论坛徽章:
0
5 [报告]
发表于 2007-06-17 23:18 |只看该作者
不知道C中有没有异常机制,用异常可以实现!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2007-06-17 23:29 |只看该作者
原帖由 openq 于 2007-6-17 23:18 发表
不知道C中有没有异常机制,用异常可以实现!

没有。

论坛徽章:
0
7 [报告]
发表于 2007-06-18 08:37 |只看该作者
原帖由 feasword 于 2007-6-17 20:06 发表
....
如果是c++还能想到用抛出异常来尝试一下,....


这个能具体说明一下么? 谢谢!

论坛徽章:
0
8 [报告]
发表于 2007-06-18 12:31 |只看该作者
原帖由 MMMIX 于 2007-6-17 23:29 发表

没有。

c里面同样可以用setjmp和longjmp来是实现异常机制。用法也很简单,楼主随便收一下就有了

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2007-06-18 12:41 |只看该作者
原帖由 zx_wing 于 2007-6-18 12:31 发表

c里面同样可以用setjmp和longjmp来是实现异常机制。用法也很简单,楼主随便收一下就有了

要算这个的话另说

论坛徽章:
0
10 [报告]
发表于 2007-06-18 12:47 |只看该作者
原帖由 MMMIX 于 2007-6-18 12:41 发表

要算这个的话另说

确实,c是没有现成的异常机制。:em11:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP