#if _ESPIK_DEBUG #ifdef __GLIBC__ #include #endif #include #include inline void espik_debug_bt (int num) { #ifdef __GLIBC__ void *array[128]; size_t size; char **strings; size_t i; if (!debug_bt) return; fprintf(stderr, "\n***** Backtrace (Signal %d) *****\n", num); size = backtrace(array, 128); strings = backtrace_symbols(array, size); for (i = 0 ; i < size ; i++) fprintf(stderr, "%s\n", strings[i]); if (strings) free(strings); #else fprintf(stderr, "Your system doesn't have glibc. Backtraces disabled. But program receive signal %d.\n", num); #endif /* __GLIBC__ */ } void espik_debug_init() { struct sigaction sa; sa.sa_handler = espik_debug_bt; sigaction(SIGSEGV, &sa, (struct sigaction *)0); sigaction(SIGINT, &sa, (struct sigaction *)0); sigaction(SIGKILL, &sa, (struct sigaction *)0); } #endif /* _ESPIK_DEBUG */