5
Comment puis-je imprimer la pile d'appels complète quand une exception std :: augmente?C++ obtenir la pile d'appel de std :: exception
Comment puis-je imprimer la pile d'appels complète quand une exception std :: augmente?C++ obtenir la pile d'appel de std :: exception
Si vous utilisez g ++ (gcc) et ne me dérange pas le code étant non-portable, vous pouvez essayer de suivre les sages paroles de "tombarta":
(copie éhontée de 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);
}
Je n'ai pas essayé cela moi-même, donc je ne sais pas si cela fonctionne.
Aucun moyen de le faire en utilisant C++ standard - votre compilateur spécifique peut avoir quelque chose que vous pouvez utiliser. –
quel compilateur utilisez-vous? – carlsborg
Quelle plate-forme utilisez-vous également? – reece