Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do throw an exception only when the requested factory was not found, not all the...
[simgrid.git] / src / xbt / backtrace_linux.c
index a74a129..1bec9b2 100644 (file)
@@ -15,18 +15,23 @@ extern char **environ;          /* the environment, as specified by the opengrou
 void xbt_backtrace_init(void) { }
 void xbt_backtrace_exit(void) { }
 
+void xbt_backtrace_current(xbt_ex_t * e) {
+  e->used = backtrace((void **) e->bt, XBT_BACKTRACE_SIZE);
+}
+
+  
 void xbt_ex_setup_backtrace(xbt_ex_t * e)
 {
   int i;
 
   /* to get the backtrace from the libc */
-  char **backtrace_syms = backtrace_symbols(e->bt, e->used);
+  char **backtrace_syms;
 
   /* To build the commandline of addr2line */
   char *cmd, *curr;
 
   /* to extract the addresses from the backtrace */
-  char **addrs = xbt_new(char *, e->used);
+  char **addrs;
   char buff[256], *p;
 
   /* To read the output of addr2line */
@@ -39,8 +44,12 @@ void xbt_ex_setup_backtrace(xbt_ex_t * e)
   /* To search for the right executable path when not trivial */
   struct stat stat_buf;
   char *binary_name = NULL;
-
-  e->used = backtrace((void **) e->bt, XBT_BACKTRACE_SIZE);
+   
+  xbt_assert0(e && e->used,"Backtrace not setup yet, cannot set it up for display");
+   
+  backtrace_syms = backtrace_symbols(e->bt, e->used);
+  addrs = xbt_new(char *, e->used);
+   
   e->bt_strings = NULL;
 
   /* Some arches only have stubs of backtrace, no implementation (hppa comes to mind) */