程序崩溃时打印调用栈
来源:互联网 发布:php面试自我介绍 编辑:程序博客网 时间:2024/05/18 00:48
source code:#include <stdio.h>#include <signal.h>#include <stdlib.h>#include <unistd.h>#include <execinfo.h>#define PRINT_FUNC_NAME() \ printf("invocke %s\n", __func__)void func1(void){ PRINT_FUNC_NAME(); int *p = NULL; *p = 1;}void func2(void){ PRINT_FUNC_NAME(); func1();}void func3(void){ PRINT_FUNC_NAME(); func2();}void segv_handler(int signum){ int i; int nptrs; void *buffer[100]; char **strings; nptrs = backtrace(buffer, 100); strings = backtrace_symbols(buffer, nptrs); if(NULL == strings) { perror("backtrace_symbols"); return; } printf("call stack:\n"); for(i = 0; i < nptrs; i++) { printf("%s\n", strings[i]); } free(strings); exit(-1);}int main(int argc, char **argv){ PRINT_FUNC_NAME(); signal(SIGSEGV, segv_handler); func3(); return 0;}
makefile:
target := callstackobj := print_callstack.oldflags := -rdynamicCC := gcc LD := gcc $(target) : $(obj) $(LD) $(ldflags) $< -o $@.c.o: $(CC) -c $< -o $@clean: rm *.o $(target)
程序输出:
./callstack
invocke main
invocke func3
invocke func2
invocke func1
call stack:
./callstack(segv_handler+0x25) [0x400a30]
/lib/x86_64-linux-gnu/libc.so.6(+0x364c0) [0x7f51912124c0]
./callstack(func1+0x2b) [0x4009bf]
./callstack(func2+0x20) [0x4009e7]
./callstack(func3+0x20) [0x400a09]
./callstack(main+0x3a) [0x400ae5]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f51911fd76d]
./callstack() [0x4008d9]
- 程序崩溃时打印调用栈
- C++ 程序崩溃调用堆栈打印
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- Linux调用backtrack函数打印程序崩溃时的调用堆栈
- 崩溃时打印堆栈调用日志
- 崩溃时打印堆栈调用日志
- Linux下的C++程序崩溃时打印崩溃信息
- 记录程序崩溃时的调用堆栈
- 记录程序崩溃时的调用堆栈
- 记录程序崩溃时的调用堆栈
- 记录程序崩溃时的调用堆栈
- 记录程序崩溃时的调用堆栈
- 记录程序崩溃时的调用堆栈
- 调用 inet_ntoa 程序崩溃
- 调用setSupportActionBar程序崩溃
- Android下 使用百度地图sdk
- linux路由内核实现分析(三)---路由查找过程
- 路庆晖:有效提升电商用户访问体验_亿邦电商两会
- mostFrequentSubArray
- Seven habits of effective text editing using Vim
- 程序崩溃时打印调用栈
- 黑马程序员—Java提高2(泛型,内省)
- 10个你必须掌握的超酷VI命令技巧
- Cauchy-Schwarz不等式的证明
- 初识block
- 实现几个字符串常用函数
- MySQL学习足迹记录07--数据过滤--用正则表达式进行检索
- 图像几何变换之图像位置变换之图像旋转
- linux路由内核实现分析(四)---路由缓存机制(1)