Example #1
0
static void
pan_backtrace(void)
{
	void *array[10];
	size_t size;
	size_t i;

	size = backtrace (array, 10);
	if (size == 0)
		return;
	VSB_printf(pan_vsp, "Backtrace:\n");
	for (i = 0; i < size; i++) {
		VSB_printf (pan_vsp, "  ");
		if (Symbol_Lookup(pan_vsp, array[i]) < 0) {
			char **strings;
			strings = backtrace_symbols(&array[i], 1);
			if (strings != NULL && strings[0] != NULL)
				VSB_printf(pan_vsp,
				     "%p: %s", array[i], strings[0]);
			else
				VSB_printf(pan_vsp, "%p: (?)", array[i]);
		}
		VSB_printf (pan_vsp, "\n");
	}
}
static void
pan_backtrace(struct vsb *vsb)
{
	void *array[10];
	size_t size;
	size_t i;
	char **strings;
	char *p;

	size = backtrace (array, 10);
	if (size == 0)
		return;
	VSB_printf(vsb, "Backtrace:\n");
	VSB_indent(vsb, 2);
	for (i = 0; i < size; i++) {
		if (Symbol_Lookup(vsb, array[i]) < 0) {
			strings = backtrace_symbols(&array[i], 1);
			if (strings == NULL || strings[0] == NULL) {
				VSB_printf(vsb, "%p: (?)", array[i]);
			} else {
				p = strrchr(strings[0], '/');
				if (p == NULL)
					p = strings[0];
				else
					p++;
				VSB_printf(vsb, "%p: %s", array[i], p);
			}
		}
		VSB_printf (vsb, "\n");
	}
	VSB_indent(vsb, -2);
}