36 #ifndef VIGRA_PRINT_BACKTRACE_HXX 
   37 #define VIGRA_PRINT_BACKTRACE_HXX 
   64 static char * program_name;
 
   66 static int vigra_addr2line(
void const * 
const addr)
 
   68     char addr2line_cmd[512] = {0};
 
   69     sprintf(addr2line_cmd,
"addr2line -C -f -p -i -e %.256s %p", program_name, addr);
 
   70     return system(addr2line_cmd);
 
   73 static void vigra_print_backtrace(
int sig)
 
   75     int i, trace_size = 0;
 
   76     char **messages = (
char **)NULL;
 
   77     static const int BACKTRACE_SIZE = 100;
 
   78     void *stack_traces[BACKTRACE_SIZE];
 
   80     fprintf(stderr, 
"caught signal %d, printing backtrace\n\n", sig);
 
   82     trace_size = backtrace(stack_traces, BACKTRACE_SIZE);
 
   83     messages = backtrace_symbols(stack_traces, trace_size);
 
   85     for (i = 0; i < trace_size; ++i)
 
   87         if (vigra_addr2line(stack_traces[i]) != 0)
 
   89             fprintf(stderr, 
"  error determining line # for: %sn", messages[i]);
 
   92     if (messages) { free(messages); }
 
   96 #endif // VIGRA_PRINT_BACKTRACE_HXX