diff options
Diffstat (limited to 'src/xine-utils/utils.c')
-rw-r--r-- | src/xine-utils/utils.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/xine-utils/utils.c b/src/xine-utils/utils.c index cf51f5147..828d7d934 100644 --- a/src/xine-utils/utils.c +++ b/src/xine-utils/utils.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: utils.c,v 1.11 2003/01/12 16:38:08 holstsn Exp $ + * $Id: utils.c,v 1.12 2003/03/03 17:29:07 mroi Exp $ * */ #define _POSIX_PTHREAD_SEMANTICS 1 /* for 5-arg getpwuid_r on solaris */ @@ -35,6 +35,12 @@ #include <time.h> #include <sys/types.h> #include <pthread.h> +#if HAVE_EXECINFO_H +#include <execinfo.h> +#endif +#if HAVE_UCONTEXT_H +#include <ucontext.h> +#endif #include "compat.h" @@ -133,3 +139,29 @@ void xine_usec_sleep(unsigned usec) { usleep(usec); #endif } + + +/* Obtain a backtrace and print it to stdout. */ +void xine_print_trace (void) { +#if HAVE_BACKTRACE + /* Code Taken from GNU C Library manual */ + void *array[10]; + size_t size; + char **strings; + size_t i; + + size = backtrace (array, 10); + strings = backtrace_symbols (array, size); + + printf ("Obtained %d stack frames.\n", size); + + for (i = 0; i < size; i++) { + printf ("%s\n", strings[i]); + } + free (strings); +#elif HAVE_PRINTSTACK + printstack(STDOUT_FILENO); +#else + printf("stack backtrace not available.\n"); +#endif +} |