Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Move a bit of code into the platform-dependent files (to allow their upcoming cleanup)
[simgrid.git] / src / xbt / backtrace_windows.c
index c722966..1537eba 100644 (file)
@@ -14,6 +14,8 @@
  * : support for application self-debugging.
  */
 
+#include <dbghelp.h>
+
 /* Pointer function to SymInitialize() */
 typedef BOOL (WINAPI *xbt_pfn_sym_initialize_t)(HANDLE, PSTR , BOOL);
 
@@ -97,23 +99,23 @@ backtrace (void **buffer, int size);
 char ** 
 backtrace_symbols (void *const *buffer, int size);
 
-#endif
-
 void xbt_ex_setup_backtrace(xbt_ex_t *e)  {
 int i;
-char **backtrace = backtrace_symbols (e->bt, e->used);
+char **backtrace_syms = backtrace_symbols (e->bt, e->used);
   
+  e->used     = backtrace((void**)e->bt,XBT_BACKTRACE_SIZE);
+  e->bt_strings = NULL;
   /* parse the output and build a new backtrace */
   e->bt_strings = xbt_new(char*,e->used);
   
 
   for(i=0; i<e->used; i++) 
   {
-      e->bt_strings[i] = xbt_strdup(backtrace[i]);
-      free(backtrace[i]);
+      e->bt_strings[i] = xbt_strdup(backtrace_syms[i]);
+      free(backtrace_syms[i]);
   }
   
-  free(backtrace);
+  free(backtrace_syms);
 }    
 
 int 
@@ -164,7 +166,7 @@ backtrace (void **buffer, int size)
 
     while(pos < size)
     {
-               stack_frame = (void*)calloc(1,sizeof(STACKFRAME));
+               stack_frame = (void*)xbt_new0(STACKFRAME,1);
                
                if(!stack_frame)
                {
@@ -241,7 +243,7 @@ backtrace_symbols (void *const *buffer, int size)
                return NULL;
        }
        
-       strings = (char**)calloc(size,sizeof(char*));
+       strings = xbt_new0(char*,size);
        
        if(NULL == strings)
        {
@@ -309,7 +311,7 @@ dbg_hlp_init(HANDLE process_handle)
        }
 
        /* allocation */
-       dbg_hlp = (xbt_debug_hlp_t)calloc(1,sizeof(s_xbt_debug_hlp_t));
+       dbg_hlp = xbt_new0(s_xbt_debug_hlp_t,1);
        
        if(!dbg_hlp)
                return ENOMEM;
@@ -432,8 +434,3 @@ dbg_hlp_finalize(void)
        return 0;
 }
 
-/* dummy implementation. We won't use the result, but ex.h needs it to be defined */
-int backtrace (void **__array, int __size) {
-  return 0;    
-}
-