- fprintf(stderr,"** Backtrace:\n");
- if (!e->bt_strings)
- e->bt_strings = backtrace_symbols (e->bt, e->used);
+ fprintf(stderr,
+ "** SimGrid: UNCAUGHT EXCEPTION received on %s(%d): category: %s; value: %d\n"
+ "** %s\n"
+ "** Thrown by %s()%s\n",
+ gras_os_myname(), (*xbt_getpid) (),
+ xbt_ex_catname(e->category), e->value, e->msg,
+ e->procname, thrower ? thrower : " in this process");
+ XBT_CRITICAL("%s", e->msg);
+
+ if (!e->remote && !e->bt_strings)
+ xbt_ex_setup_backtrace(e);
+
+#ifdef HAVE_BACKTRACE
+ /* We have everything to build neat backtraces */
+ {
+ int i;
+
+ if (!xbt_binary_name) {
+ fprintf(stderr, "variable 'xbt_binary_name' set to NULL. Cannot compute the backtrace\n");
+ return;
+ }
+ fprintf(stderr, "\n");
+ for (i = 0; i < e->used; i++)
+ fprintf(stderr, "%s\n", e->bt_strings[i]);