输出并解析C++的调用堆栈
本文简要介绍在Linux上输出和解析C++的call stack的方法。
开发环境:
* 编译器: gcc 4.8.2
* 操作系统: Ubuntu 14.04 x86_64
输出调用堆栈¶
glibc中提供了backtrace()
和backtrace_symbols()
两个函数来输出和解析程序的call stack,详情见man backtrace
。
下面的代码修改自backtrace手册里的例子,当程序收到SIGSEGV信号(内存访问越界)时,输出程序的调用堆栈,以方便定位崩溃点。
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void print_stack_frames(int signum) {
int j, nptrs;
#define SIZE 100
void *buffer[100];
char **strings;
nptrs = backtrace(buffer, SIZE);