Hi everyone! Friendly PSA: sometimes you're debugging a "leak" where the GC considers something reachable and therefore won't collect it, and this happens at an inopportune time for using the devtools memory panel (eg right before a DESTROY_RUNTIME collection), so you can't use the nice GUI for visualizing the GC's retaining paths.
Fear not! You can use `JS::ubi::dumpPaths` to log retaining paths of any GC thing from within GDB, or you can compile it in as you might do with a tactically placed printf. The signature is `void JS::ubi::dumpPaths(JSRuntime* rt, JS::ubi::Node node, maxRetainingPaths = 10)`. The `rt` should be the runtime that the thing belongs to, `node` is the thing (JS::ubi::Node constructs from raw GC pointers as well as Rooted and Handle), and `maxRetainingPaths` is the number of retaining paths to dump. Include the "js/UbiNodeShortestPaths.h" header to get `JS::ubi::dumpPaths`. Happy bug hunting! Example output: Path 0: 0x7fff5fbfec10 JS::ubi::RootList | | '<no edge name>' | V 0x115c49d80 JSObject | | 'shape' | V 0x12ac4db50 js::Shape | | 'base' | V 0x116244e70 js::BaseShape | | 'ShapeTable shape' | V 0x116289120 js::Shape | | 'getter' | V 0x11627b3a0 JSObject | | 'private' | V 0x11855d940 JSObject | | 'script' | V 0x113290bf0 JSScript | | 'sourceObject' | V 0x1132763c0 JSObject Full output: https://pastebin.mozilla.org/8868795 _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform