5

how can I print the full call stack when a std::exception raises?

7
  • 2
    No way of doing this using standard C++ - your specific compiler may have something you can use. Commented Jul 31, 2010 at 14:14
  • which compiler are you using? Commented Jul 31, 2010 at 14:14
  • Which platform are you using, as well? Commented Jul 31, 2010 at 14:24
  • stackoverflow.com/questions/691719/… stackoverflow.com/questions/616653/… Commented Jul 31, 2010 at 14:25
  • I'm using g++ in debian. Commented Jul 31, 2010 at 14:28

1 Answer 1

4

If you're using g++ (gcc) and don't mind the code being non-portable, you could try following the wise words of "tombarta":

(shameless copy from 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);
}

I haven't tried this myself, so I do not know if it works.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.