فهرست منبع

added hl_dump_stack()

ncannasse 8 سال پیش
والد
کامیت
a839a8bc29
2فایلهای تغییر یافته به همراه20 افزوده شده و 0 حذف شده
  1. 1 0
      src/hl.h
  2. 19 0
      src/std/error.c

+ 1 - 0
src/hl.h

@@ -489,6 +489,7 @@ HL_API void hl_assert();
 HL_API void hl_throw( vdynamic *v );
 HL_API void hl_rethrow( vdynamic *v );
 HL_API void hl_setup_exception( void *resolve_symbol, void *capture_stack );
+HL_API void hl_dump_stack();
 HL_API varray *hl_exception_stack();
 
 HL_API vvirtual *hl_to_virtual( hl_type *vt, vdynamic *obj );

+ 19 - 0
src/std/error.c

@@ -90,6 +90,25 @@ HL_PRIM void hl_throw( vdynamic *v ) {
 	longjmp(t->buf,1);
 }
 
+HL_PRIM void hl_dump_stack() {
+	void *stack[0x1000];
+	int count = capture_stack_func(stack, 0x1000);
+	int i;
+	for(i=0;i<count;i++) {
+		void *addr = stack[i];
+		uchar sym[512];
+		int size = 512;
+		uchar *str = resolve_symbol_func(addr, sym, &size);
+		if( str == NULL ) {
+			int iaddr = (int)(int_val)addr;
+			str = sym;
+			uprintf(USTR("@0x%X\n"),iaddr);
+		} else
+			uprintf(USTR("%s\n"),str);
+	}
+}
+
+
 HL_PRIM varray *hl_exception_stack() {
 	varray *a = hl_alloc_array(&hlt_bytes, stack_count);
 	int i;