c语言打印调用栈
来源:互联网 发布:随机梯度下降算法讲解 编辑:程序博客网 时间:2024/05/20 14:18
int backtrace(void **buffer, int size);
char **backtrace_symbols(void *const *buffer, int size);
void backtrace_symbols_fd(void *const *buffer, int size, int fd);
代码示例
#include <stdio.h>#include <execinfo.h>#include <stdlib.h>void fun1();void fun2();void fun3();void fun4();void fun5();void fun6();void print_callstack();int main(){fun6();return 0;}void fun1(){print_callstack();}void fun2(){fun1();}void fun3(){fun2();}void fun4(){fun3();}void fun5(){fun4();}void fun6(){fun5();}void print_callstack(){int size = 32;int i;void *array[32];int stack_num = backtrace(array, size);char **stacktrace = NULL;printf("%s begin\n", __func__);stacktrace = (char**)backtrace_symbols(array, stack_num);for (i = 0; i < stack_num; i++){printf("%s\n", stacktrace[i]);}free(stacktrace);printf("%s end\n", __func__);}
[~]$ gcc test.c
[~]$ ./a.out
print_callstack begin
./a.out() [0x4006f8]
./a.out() [0x400680]
./a.out() [0x400690]
./a.out() [0x4006a0]
./a.out() [0x4006b0]
./a.out() [0x4006c0]
./a.out() [0x4006d0]
./a.out() [0x40066b]
/lib64/libc.so.6(__libc_start_main+0xf5) [0x7f523b25ec05]
./a.out() [0x400599]
print_callstack end
[~]$ nm -n a.out
U backtrace@@GLIBC_2.2.5
U backtrace_symbols@@GLIBC_2.2.5
U free@@GLIBC_2.2.5
w __gmon_start__
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w _Jv_RegisterClasses
U __libc_start_main@@GLIBC_2.2.5
U printf@@GLIBC_2.2.5
U puts@@GLIBC_2.2.5
00000000004004d0 T _init
0000000000400570 T _start
00000000004005a0 t deregister_tm_clones
00000000004005d0 t register_tm_clones
0000000000400610 t __do_global_dtors_aux
0000000000400630 t frame_dummy
000000000040065d T main
0000000000400672 T fun1
0000000000400682 T fun2
0000000000400692 T fun3
00000000004006a2 T fun4
00000000004006b2 T fun5
00000000004006c2 T fun6
00000000004006d2 T print_callstack
0000000000400790 T __libc_csu_init
0000000000400800 T __libc_csu_fini
0000000000400804 T _fini
0000000000400810 R _IO_stdin_used
0000000000400818 R __dso_handle
0000000000400840 r __func__.2719
0000000000400a90 r __FRAME_END__
0000000000600e10 t __frame_dummy_init_array_entry
0000000000600e10 t __init_array_start
0000000000600e18 t __do_global_dtors_aux_fini_array_entry
0000000000600e18 t __init_array_end
0000000000600e20 d __JCR_END__
0000000000600e20 d __JCR_LIST__
0000000000600e28 d _DYNAMIC
0000000000601000 d _GLOBAL_OFFSET_TABLE_
0000000000601050 D __data_start
0000000000601050 W data_start
0000000000601054 B __bss_start
0000000000601054 b completed.6344
0000000000601054 D _edata
0000000000601058 B _end
0000000000601058 D __TMC_END__
[~]$
- c语言打印调用栈
- C语言下打印调用栈
- 编程基础-----c语言打印调用栈
- 编程基础-----c语言打印调用栈
- 各语言打印调用栈
- C++debug 打印调用栈
- c语言:调用函数打印How do you do!
- c语言,打印百分号
- C语言打印菱形
- C语言打印日历
- C语言打印自己
- C语言打印万年历
- C语言打印九九乘法表
- c语言打印菱形
- c语言打印九九乘法表
- c语言打印菱形
- c语言打印菱形
- C 语言对齐打印
- cocos2d-x之写自己三国手游(一)
- java Future用法和意义一句话击破
- easyUI学习笔记_基础
- python常见error排错汇总
- Java集合分析(2):ListIterator
- c语言打印调用栈
- MySQL的时间和日期函数
- Coursera 斯坦福 算法课 Course 1 Week 1
- PyQt5学习教程1:最简单的窗体
- 观察者模式
- SSL2780 2017年10月20日提高T2 收银员(dp)
- An Intuitive Explanation of Convolutional Neural Networks
- STL之heap堆的应用
- C6748_UART中断