5
如何在std :: exception引发时打印完整的调用堆栈?C++从std :: exception获取调用堆栈
如何在std :: exception引发时打印完整的调用堆栈?C++从std :: exception获取调用堆栈
如果你使用G ++(GCC),不介意的代码是不可移植的,你可以尝试以下的"tombarta"明智的话:
(从tombarta无耻复印件):
#include <execinfo.h>
void print_trace(FILE *out, const char *file, int line)
{
const size_t max_depth = 100;
size_t stack_depth;
void *stack_addrs[max_depth];
char **stack_strings;
stack_depth = backtrace(stack_addrs, max_depth);
stack_strings = backtrace_symbols(stack_addrs, stack_depth);
fprintf(out, "Call stack from %s:%d:\n", file, line);
for (size_t i = 1; i < stack_depth; i++) {
fprintf(out, " %s\n", stack_strings[i]);
}
free(stack_strings); // malloc()ed by backtrace_symbols
fflush(out);
}
我没有尝试过这个我自己,所以我不知道它是否有效。
使用标准C++无法做到这一点 - 您的特定编译器可能有您可以使用的东西。 – 2010-07-31 14:14:39
你正在使用哪种编译器? – carlsborg 2010-07-31 14:14:44
你还在使用哪个平台? – reece 2010-07-31 14:24:02