Most of the stuff in [debugging] also applies but there are some specific things that can help out when debugging the GC
There’s a common pattern of printing to stderr by doing
if (0) fprintf(stderr, "stuff");
This is particularly prevalent around the GC and the VM code.
If you want to see what the output is, just change the 0 to 1 and then
recompile and rerun.
GC_DEBUGEnable by editing the Makefile and adding -DGC_DEBUG to the debugflags
embeds GC debugging information inside the RVALUE struct (file and line that the object was created)
This is added in gc.c during the newobj_init function.
It’s also used during gc_mark_children
RGENGC_DEBUGEnable by editing the Makefile and adding -DRGENGC_DEBUG=<n> to the
debugflags
Where <n> is a number representing the level at which we want to print out
debug information.
'RGENGC_CHECK_MODEThis checks the internal state of the GC at various points (and is basically the
only way to trigger the gc_check_internal_consistency function)