Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89978
  • 博文数量: 99
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 21:29
文章分类

全部博文(99)

文章存档

2013年(5)

2012年(94)

我的朋友

分类:

2012-12-26 21:58:20

不多说,见如下文件。

点击(此处)折叠或打开

  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]

阅读(209) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~