aboutsummaryrefslogblamecommitdiff
path: root/src/espik_debug.c
blob: 9f4a1211a393a2b4d6f0e252cbf88aff6218d96e (plain) (tree)










































                                                                                                                      
#if _ESPIK_DEBUG

#ifdef __GLIBC__
#include <execinfo.h>
#endif 

#include <stdio.h>
#include <signal.h>

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 */