如何在linux中打印程序堆栈信息,用于调试。
有时候在写完代码之后需要自己手动测试功能,在linux环境中往往需要gdb调试打断点查看堆栈。往往公司的服务器一般是多人同时使用的。往往性能不是太强。gdb调试的时候载入的时候Reading symbols from
的时候往往会卡那么一会儿虽然时间不长,但是很烦。我在这里写了简单实用打印堆栈的工具类。算是减少一点工作量。
偶尔会遇到程序崩溃的情况,但是在一些线上部署环境的时候通常调试环境很复杂,通常由于特殊情况下core文件无法产生,或者无法拿到。这个类也可以添加到日记类中,在程序奔溃前用于打印出具体信息。
首先在linux下有个3个函数可以用于配合打印堆栈信息。
//linux 下 使用man可以查看具体详细信息,这里信息大长了。我就截取一部分把。
/*backtrace() returns a backtrace for the calling program, in the array pointed to by buffer.*/
int backtrace(void **buffer, int size);
/*Given the set of addresses returned by backtrace() in buffer, backtrace_symbols() translates the addresses into an array of strings that describe the addresses symbolically.
This array is malloc(3)ed by backtrace_symbols(), and must be freed by the caller.*/
char **backtrace_symbols(void *const *buffer, int size);
/*backtrace_symbols_fd() takes