5
Wie kann ich den gesamten Aufrufstapel drucken, wenn eine std :: exception ausgelöst wird?C++ Aufrufstack von std :: exception
Wie kann ich den gesamten Aufrufstapel drucken, wenn eine std :: exception ausgelöst wird?C++ Aufrufstack von std :: exception
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.
Keine Möglichkeit, dies unter Verwendung von Standard-C++ zu tun - Ihr spezifischer Compiler könnte etwas haben, das Sie verwenden können. –
welchen Compiler benutzen Sie? – carlsborg
Welche Plattform benutzen Sie auch? – reece