summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gc.c7
-rw-r--r--internal.h6
2 files changed, 11 insertions, 2 deletions
diff --git a/gc.c b/gc.c
index f9b57423c1..0d7732a78e 100644
--- a/gc.c
+++ b/gc.c
@@ -11449,6 +11449,13 @@ rb_obj_info_dump(VALUE obj)
fprintf(stderr, "rb_obj_info_dump: %s\n", rb_raw_obj_info(buff, 0x100, obj));
}
+void
+rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func)
+{
+ char buff[0x100];
+ fprintf(stderr, "<OBJ_INFO:%s@%s:%d> %s\n", func, file, line, rb_raw_obj_info(buff, 0x100, obj));
+}
+
#if GC_DEBUG
void
diff --git a/internal.h b/internal.h
index 4df3826db9..eb18581d47 100644
--- a/internal.h
+++ b/internal.h
@@ -1390,10 +1390,12 @@ rb_ary_entry_internal(VALUE ary, long offset)
/* MRI debug support */
void rb_obj_info_dump(VALUE obj);
-void ruby_debug_breakpoint(void);
+void rb_obj_info_dump_loc(VALUE obj, const char *file, int line, const char *func);
+void ruby_debug_breakpoint(void);
// show obj data structure without any side-effect
-#define rp(obj) rb_obj_info_dump((VALUE)obj);
+#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, __func__)
+
// same as rp, but add message header
#define rp_m(msg, obj) do { \
fprintf(stderr, "%s", (msg)); \