Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
New function: xbt_display_backtrace(). Sweet while debugging
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 11 Apr 2006 22:23:01 +0000 (22:23 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 11 Apr 2006 22:23:01 +0000 (22:23 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2126 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/ex.h
src/xbt/ex.c

index 457047b..9e4ff9a 100644 (file)
@@ -512,6 +512,7 @@ extern void __xbt_ex_terminate_default(xbt_ex_t *e);
 void xbt_ex_free(xbt_ex_t *e);
 
 void xbt_ex_display(xbt_ex_t *e);
+void xbt_display_backtrace(void);
 
 /** @} */
 #endif /* __XBT_EX_H__ */
index 8d1cba1..5896971 100644 (file)
@@ -46,6 +46,27 @@ ex_ctx_t *__xbt_ex_ctx_default(void) {
     return &ctx;
 }
 
+
+/** \brief show the backtrace of the current point (lovely while debuging) */
+void xbt_display_backtrace(void) {
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_POPEN) && defined(ADDR2LINE)
+  xbt_ex_t e;
+  int i;
+
+  e.used     = backtrace((void**)e.bt,XBT_BACKTRACE_SIZE);
+  e.bt_strings = NULL;
+  xbt_ex_setup_backtrace(&e);
+  for (i=0; i<e.used; i++)
+    fprintf(stderr,"%s\n",e.bt_strings[i]);
+
+  e.msg=NULL;
+  e.remote=0;
+  xbt_ex_free(&e);
+#else 
+  fprintf(stderr,"No backtrace on this arch");
+#endif
+}
+
 void xbt_ex_setup_backtrace(xbt_ex_t *e)  {
 #if defined(HAVE_EXECINFO_H) && defined(HAVE_POPEN) && defined(ADDR2LINE)
   int i;