linux打印当前函数调用栈backtrace

不多说,见如下文件。

点击(此处)折叠或打开

  1. backtrace.c:

  2. #include <execinfo.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>

  5. #define BT_MAX_TRACE 100

  6. void print_trace (void)
  7. {
  8.     void *array[BT_MAX_TRACE];
  9.     size_t size;
  10.     char **strings;
  11.     size_t i;

  12.     size = backtrace (array, BT_MAX_TRACE);
  13.     strings = backtrace_symbols (array, size);

  14.     printf ("Obtained %zd stack frames.\n", size);

  15.     for (i = 0; i < size; i++)
  16.         printf ("%s\n", strings[i]);

  17.     free (strings);
  18. }


  19. void dummy_function (void)
  20. {
  21.     print_trace ();
  22. }
  23. void test1()
  24. {
  25.  dummy_function();
  26. }
  27. void test2()
  28. {
  29.  test1();
  30. }

  31. int main (void)
  32. {
  33.     test2();
  34.     return 0;
  35. }

编译成backtrace,执行即可看出效果:gcc -g -rdynamic -o backtrace backtrace.c

# ./bt
Obtained 7 stack frames.
./bt(print_trace+0x1f) [0x80487b3]
./bt(dummy_function+0xb) [0x8048822]
./bt(test1+0xb) [0x804882f]
./bt(test2+0xb) [0x804883c]
./bt(main+0xb) [0x8048849]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x17fbd6]
./bt() [0x8048701]

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(123) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值