C ++从std :: exception获取调用堆栈

时间:2010-07-31 13:59:49

标签: c++ exception callstack

当std :: exception引发时,如何打印完整的调用堆栈?

1 个答案:

答案 0 :(得分:4)

如果你正在使用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);
}

我自己没试过,所以我不知道它是否有效。