Allow gdb's rp to work on classes offline

It's useful to be able to get information about classes without a
running process, ie. when debugging a coredump.
This commit is contained in:
John Hawthorn 2025-03-03 17:03:50 -08:00
parent e3dd766e99
commit f13e86a70e
Notes: git 2025-04-10 18:34:02 +00:00

View File

@ -523,14 +523,14 @@ document rp_bignum
end end
define rp_class define rp_class
set $class_and_classext = (struct RClass_and_rb_classext_t *)($arg0)
printf "(struct RClass *) %p", (void*)$arg0 printf "(struct RClass *) %p", (void*)$arg0
if RCLASS_ORIGIN((struct RClass *)($arg0)) != $arg0 if $class_and_classext->classext->origin_ != (VALUE)$arg0
printf " -> %p", RCLASS_ORIGIN((struct RClass *)($arg0)) printf " -> %p", $class_and_classext->classext->origin_
end end
printf "\n" printf "\n"
rb_classname $arg0 rb_classname $arg0
print/x *(struct RClass *)($arg0) print/x *$class_and_classext
print *RCLASS_EXT((struct RClass *)($arg0))
end end
document rp_class document rp_class
Print the content of a Class/Module. Print the content of a Class/Module.
@ -896,10 +896,10 @@ document rb_method_entry
end end
define rb_classname define rb_classname
# up to 128bit int set $rb_classname = ((struct RClass_and_rb_classext_t*)$arg0)->classext->classpath
set $rb_classname = rb_mod_name($arg0) if $rb_classname != RUBY_Qfalse
if $rb_classname != RUBY_Qnil print_string $rb_classname
rp $rb_classname printf "\n"
else else
echo anonymous class/module\n echo anonymous class/module\n
end end