Lately I've had some problems in production where some processes have gone "WTF!" I haven't had much time to spend on it myself so mostly I'm just a bystander while other people with more time poke at it.
I've been reading the manuals about gdb and learned I didn't need to use Internals::DumpArenas to see everything but could just use gdb directly. This snippet just loops and shows the arena's heads.
define dumparenas
printf "arenas = {\n"
dumparena PL_sv_arenaroot
print "}\n"
end
define dumparena
printf "\t0x%x", (int)$arg0
set $acount = ((struct sv*)$arg0)->sv_refcnt
set $anext = (struct sv*)(((struct sv*)$arg0)->sv_any)
if $anext
printf ", /* has %d SVs */\n", $acount
dumparena $anext
else
printf " /* has %d SVs */\n", $acount
end
end
dumparenas
(gdb) run -Mblib -MSomething -edump
(gdb) dumparenas
arenas = {
0x80a200, /* has 128 SVs */
0x833200, /* has 255 SVs */
0x817800, /* has 255 SVs */
0x813400, /* has 255 SVs */
0x816800, /* has 255 SVs */
0x830200, /* has 255 SVs */
0x82ae00, /* has 255 SVs */
0x815800, /* has 255 SVs */
0x824e00, /* has 255 SVs */
0x204240, /* has 17 SVs */
0x823e00, /* has 255 SVs */
0x827e00, /* has 255 SVs */
0x826e00, /* has 255 SVs */
0x825e00, /* has 255 SVs */
0x820000, /* has 255 SVs */
0x81e600, /* has 255 SVs */
0x80f200, /* has 255 SVs */
0x804000 /* has 255 SVs */
$1 = "}\n"