代码之家  ›  专栏  ›  技术社区  ›  MBZ

C++从STD获得调用堆栈::异常

  •  5
  • MBZ  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  4
  •   S.C. Madsen    14 年前

    如果您使用的是g++(gcc),并且不介意代码不可移植,那么您可以尝试遵循 "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);
    }