2010-07-31 10 views
5

Wie kann ich den gesamten Aufrufstapel drucken, wenn eine std :: exception ausgelöst wird?C++ Aufrufstack von std :: exception

+2

Keine Möglichkeit, dies unter Verwendung von Standard-C++ zu tun - Ihr spezifischer Compiler könnte etwas haben, das Sie verwenden können. –

+0

welchen Compiler benutzen Sie? – carlsborg

+0

Welche Plattform benutzen Sie auch? – reece

Antwort

4

Wenn Sie g verwenden ++ (gcc) und nichts dagegen haben, den Code nicht tragbar sein, könnten Sie versuchen, die weisen Worte von "tombarta" folgende:

(schamlose Kopie von 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); 
} 

Ich habe das selbst nicht versucht, also weiß ich nicht, ob es funktioniert.

Verwandte Themen