The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Devel-MAT

0.53    2024-03-07
         * Read PMAT file format 0.6 with its shared HEK pointer additions
         * Added `strtab` command for analysing the PL_strtab shared strings
         * Added count/skip/no-sort options and a filtering argument to
           `values` command
         * Added a `stop` command to cancel an ongoing pagination
         * Only print "class it experimental" warnings when reading an actual
           class or object instance from a PMAT file, rather than any version
           0.5 (or later).
         * Swap unit tests from `Test::More` to `Test2::V0`

0.52    2024-01-13
         * Ensure that `packages -V` can cope with version objects as well as
           plain numerical SVs
         * Make sure to load `Devel::MAT` only after processing the `--blib`
           commandline option

         * Print a warning and skip attempts to apply SVx annotations to
           unrecognised SV addresses (alleviates but does not fix RT134117)

0.51    2023-03-23
         * Don't crash when loading files that claim non-existent SVs are

0.50    2023-03-03
         * Improved tree-forming algorithm in `pmat-diff` that produces better
           output shapes
         * Annotate SVs as being mortalized if the dumpfile contains that

         * Ensure pmat-diff doesn't get stuck in a loop trying to break cycles
           when forming tree shapes
         * Ensure Reachability tool understands that CLASS is a kind of stash

0.49    2022-10-03
         * Much improved output from pmat-diff:
            + Attempt to group up unique SVs into small trees by reference
            + Annotate SVs that are MRO caches and hence dumper noise
         * Added `$sv->outref_named`, `$sv->maybe_outref_named`,
           `$struct->maybe_field_named` and similar methods
         * Migrate `pmat-list-dangling-ptrs` script into a real tool command
         * Have `list-dangling-ptrs` test fields of C_STRUCTs as well

         * Ensure that `packages` command doesn't get upset about non-globs in
           the toplevel stash

0.48    2022-08-30
         * Recognise 'quit' as an exit command from the pmat shell
         * Added 'find cv' filter
         * Have ->format_sv_with_value pick out a single array element or hash
           value to show as an example
         * Have ->format_sv_with_value show GLOB names
         * Allow extension tools to insert extra output into 'show SV' command
         * Added 'tools' and 'tool' commands
         * Expermental, work-in-progress handling of PMAT 0.5 file format,
           which adds support for core 'feature-class' classes and instances

0.47    2022-04-02
         * Improved handling of root SVs including custom ones annotated by
           the dumpfile itself
         * Handle the magic VTBL pointer field in latest dumpfile format
         * Added `find magic` filter

         * 'show' tool should inspect `$sv->type` instead of relying on actual
           blessed type of SV wrapper
         * Fix default provided `Devel::MAT::Cmd->format_heading` method

0.46    2022-03-29
         * Support the new STRUCT types in .pmat files
            + Added `show` STRUCT support
            + Added `find struct` filter
            + Added a nice shiney new icon for STRUCT SV type
         * Added `pmat --blib` option for convenient testing of thirdparty
           helper modules
         * Stop stealing GVs or constant SVs out of the first pad on ithreads

0.45    2022-02-26
         * Add support for perl 5.35's boolean types
         * Added a nice shiney new icon for BOOL SV type

0.44    2021-03-27
         * Rename `find lexical --all` to `--inactive`
         * Have `find lexical` indicate if it was found in an inactive pad
         * Paginate output of `outrefs` and `inrefs` commands
         * Use Feature::Compat::Try
         * Style modernisations for perl v5.14+

0.43    2020-04-24
         * Have `callers` print the actual CV identity of subs
         * Many improvements to `show` command:
            + Added `show --full-pv` for SCALAR
            + Added `show --pad` for CODE
            + Have `show CODE` print the protosub if applicable
            + Have `show PAD|CODE` indicate `our`/`state` and outer-capture
         * Added `find lexical` filter
         * Support Devel::MAT::Dumper 0.44's CODEx_PADNAME_FLAGS annotations
         * Display CODE() using more friendly "proto" or "closure" flags
           instead of "P" and "C"

         * Fix `find blessed` command (RT131079)

0.42    2019-03-21 22:36:09
         * Rename `callstack` to `callers`
         * Optionally show pad in `callers` output
         * Check symbol table before using ->symname in `identify`
         * Added `find num` filter
         * Load the -DDEBUG_LEAKING_SCALARS dumper extension

0.41    2019-01-14 18:19:44
         * Nicer table output in command tools
         * Added `pmat-counts` for giving a quick summary of a series of
           heapdump files
         * Load the SV->SV annotations written by DMD_helper code in
           thirdparty XS modules
         * Added a `stack` command

0.40    2018-09-07 14:57:06
         * Read dumpfile format v0.4 - SV extension size table
         * Elide glob symbol names if possible in 'identify' output
         * If `identify` doesn't find any SVs, try harder by ignoring
           filtering options
         * Track `local` modified variables
         * Optionally print $VERSION in `packages` command
         * Have `find` tool respect pagination

         * Don't collide .pmat files during parallel build testing (RT126041)

0.39    2018-08-09 13:37:24
         * Fix unit test script for now-removed tool file (RT125994)

0.38    2018-08-02 17:47:44
         * Improvements to 'pmat-diff'
            + Added --one mode
         * Improvements to 'find' command
            + Added 'blessed' filter
            + Allow filters to be combined
            + Added --count option
         * Added --quiet option to main 'pmat' script
         * Report progress to STDERR, not STDOUT

0.37    2018-07-24 16:56:49
         * Optional splitting of SCALAR by subtype in 'count' command
         * Small improvements to 'pmat-diff'
         * Added $sv->basetype method
         * Added 'pmat-leakreport'
         * Handle upcoming PMAT v0.3 format with compressed undefs

0.36    2018-07-17 10:42:41
         * Migrated Devel::MAT::Dumper into its own distribution

0.35    2018-07-03 14:58:53
         * Various improvements to 'count' command
         * Remove 'sizes' command because 'count' does the same thing now
         * Added new 'size' command for individual SVs
         * Added new 'packages' command for walking the symbol table
         * Support pagination of long-output commands via 'more'

0.34    2018-04-02 18:39:36
         * Have 'show' on a PAD use ->format_sv_with_value and ->format_note
         * Better external API for $sv->magic_svs
         * Print details of magic in 'show' command

         * Fix for Sizes tool to use $cv->padnames_av (RT124834)

0.33    2018-01-23 01:22:25
         * Added `inrefs` and `outrefs` commands
         * Improvements to output of `show` command
         * Indicate circular vs. non-circular self-references in `identify`
           command output
         * Accept names of symbols as valid SV addresses
         * Renamed $cv->padnames to ->padnames_av`
         * Added $cv->max_padix

0.32    2017-12-17 00:31:53
         * Only elide single-referrant RVs in `identify` output
         * "Loading file ..." message should mention that its count is in
           bytes (thanks DAKKAR)
         * Extract the `callstack` command's stringify behaviour into a new
           shared ->format_sv_with_value method

0.31    2017-11-23 22:25:08
         * Annotate each root SV with its rootname in formatted output
         * Expanded userguide docs

         * Use File::Spec->rel2abs() instead of Cwd::abs_path() to hopefully
           keep MSWin32 happier (RT123235)
         * chmod +x all the bin/ scripts

0.30    2017-10-14 20:00:58
         * Migrate `pmat-sizes` and `pmat-find-pv` stand-alone scripts into
           Tool commands
         * Move the 'io find' tool to 'find io'

         * Correct handling of strong vs weak root references in inref_graph
           method and 'identify' command (fixes RT123233)

0.29    2017-10-11 21:16:12
         * Slightly more efficient file loading by combining some steps
         * Further optimisation of Inrefs tool CPU performance
         * Much improved 'help' command and command system metadata
         * Neater table formatting of tabular command output
         * Default --depth 10 to 'identify' command

         * Capture the string values from the shared string table

0.28    2017-10-10 00:55:37
         * Further reworking of the way command-providing Tools can format
           their output
         * Richer display of detail in many commands, including 'identify'
         * Have 'show' tool give overall byte-size of the SV
         * Elide PADs and PADLISTs when identifying lexicals
         * Make Inrefs tool more efficient in CPU and memory requirements

0.27    2017-09-29 19:09:11
         * Major reworking of the way command-providing Tools work, and supply
           output to their containing user interface.
         * Elide symbol table entries in 'identify' output
         * Don't accept __ANON__ symbol names as valid roots for inrefs graph
         * Added command tools for listing the root SVs and the symbol table
         * General improvements to output format and commandline structure of
           other tools

0.26    2017/05/09 19:14:57
         * Handle perl 5.25.6's moving of OP_PUSHRE to OP_SPLIT
         * Don't bother #include'ing <unistd.h> as we don't need it

0.25    2017/03/27 14:09:55
         * Attempt to elide RVs in `identify` output
         * Add a 'help' command to pmat shell
         * Added the start of Devel::MAT::UserGuide
         * Moved `pmat-callstack` to  `pmat> callstack`
         * Removed used of given/when syntax

         * Fix for perl 5.25.x's removal of ->op_sibling (RT114581)
         * Avoid creating files called -e.pmat (RT119164)
         * abs_path() the dumpfile path at startup time in case of chdir()

0.24    2016/06/03 19:07:47
         * Capture the input/output fileno values of IO handles
         * Moved more standalone commands into 'pmat' command Tools
            + pmat-identify-sv  becomes  pmat> identify
            + pmat-show-sv      becomes  pmat> show
         * Added  pmat> io  commands
         * Make main 'pmat' into an interactive repl-like program if run with
           no additional arguments

0.23    2016/04/05 16:32:43
         * Allow -dump_at_SIGNAME for any named signal
         * Added simple 'pmat-diff' script
         * Distinguish undefined scalars from defined ones, using a new icon
         * Initial experiment at generic 'command' ability
         * Moved GTK explorer to its own distribution;

0.22    2016/03/16 16:22:19
         * Added a simple script to find PVs by content
         * Updated documentation to =head2 barename style

         * Fix back-compat loading of v0.1 files with EVAL contexts in
         * Fix perl5.22/ithreads that lacks padnames
         * Fix perl5.23.8 that removes blk_sub.argarray

0.21    2015/10/29 20:58:29
         * Compatibility with perl 5.22 (RT100458):
            + Added/removed roots
            + Correctly handle GV-less CVs
         * Updated dumpfile format
            + Store the CvDEPTH of CVs and the olddepth of SUB contexts
            + Capture CvLEXICAL flag and the name of CvNAMED CVs
         * Allow lookup of PAD index from padname for lexicals (RT100967)
         * Improved output format of pmat-callstack, showing the value of a
           $self lexical if one exists
         * Increased dump format minor version to 2

         * No need to emit two copies of the default stash if perl has heap-
           allocated it (RT103499)

0.20    2014/12/04 18:35:09
         * Allow serial-numbering of .pmat files in the Dumper
         * Totally refactored $pmat->identify to return an abstract Graph
         * Much improved pmat-identify-sv output; sort strong-refs first,
           use Unicode linedrawing, identify "already seen" SVs clearer
         * GTK Explorer improvements:
            + Allow search by symbol
            + Show longer PV strings in tooltip
            + Selectable SV detail labels

0.19    2014/11/18 13:17:28
         * No need to annotate 'directly' or 'indirectly' on outref names
         * Added -dump_at_DIE option to Devel::MAT::Dumper
         * Added icon for INVLIST from perl 5.20

0.18    2014/07/14 22:45:08
         * Improved for Tools to create custom UIs
            + Widget trees
            + Label text + icon
            + Tool-localised icon load paths
         * Support loading Tools automatically
         * Neater API for inrefs/outrefs that also indicates link strength

0.17    2014/01/22 21:33:45
         * Also dump SvUTF8() flag of PVs
         * Added pmat-cat-svpv

         * Don't crash on NULL PADLIST elements (RT92290)

0.16    2014/01/15 18:18:53
         * More accurate format for dumping SV MAGIC annotations
            - note that older files will contain incorrect information
         * More accurate backref information
         * Improvements to analysis of PAD lexicals

         * Fix many cases of optree dumping to get correct PAD indexes
         * Further minor fixes that improve SvREFCNT / inrefs accuracy

0.15    2014/01/14 11:12:37
         * Remember to basename() $0 for default dumpfile name
         * Added -eager_option import option
         * Added $df->roots_strong
         * Added options to $pmat->identify and pmat-identify-sv command

         * Avoid infinite loop in $pmat->identify in cyclic cases
         * Fix docs on ->rv method (RT92122)

0.14    2014/01/04 20:25:16
         * Move much core data storage into XS structs, for reduced memory
           consumption of analyser and some CPU performance gains
         * Display human-readable size information in GTK explorer
         * Added a size totals summary commandline tool
         * Improved recursion logic in Inrefs tool; avoids multiple recursions
           into shared structures

         * Fix for 5.10.0

0.13    2013/12/06 21:37:35
         * Performance improvement to inrefs counting
         * Added Sizes tool - calculates structure and owned set and sizes
         * Allow Tools to declare UI radiobutton sets
         * Improved Tools ability to interact with the SV list
         * Disable Tools menu items for loaded tools to avoid loading them

         * Add List::UtilsBy to requirements
         * Our version of dopoptosub_at() doesn't need aTHX_

0.12    2013/12/03 15:18:43
         * Classify outrefs and inrefs into various kinds
         * Subclass ARRAY into PADLIST, PADNAMES, PAD for CODE
         * Allow selection of what kinds of refs to count/display on the GTK
         * Store more flags (CvWEAKOUTSIDE, CvCVGV_RC, AvREAL) so as to get
           strong/weak references correct
         * Store the SvOUTSTASH of SCALARs and REFs
         * Added a commandline wrapper for $pmat->identify

         * require() tool .pm files automatically when calling ->load_tool

0.11    2013/11/28 14:30:32
         * Complete redesign of dumpfile format so it is more extensible in future
         * Represent RVs by their own type, REF, rather than being a kind of SCALAR
         * Store caller()-like context in dumpfiles as well
         * Store CLONE/CLONED/ISXSUB CV flags and oproot
         * Attempt to match CLONE protosubs with CLONED closures
         * Added SCALAR->iv method
         * Neaten the names of STASHes whose names begin with a control character
         * Pretty-print PVs and limit length to 32 characters in GTK explorer
         * Added icons for REF and LVALUE types

         * Guard against PL_main_root being NULL, as it can be early in compilation
         * Improved Reachability tool logic for CODE PAD slots

0.10    2013/11/26 00:42:14
         * Display dumped perl version, SV and byte counts in GTK explorer
           status bar
         * Dump all GVs, even those without GPs
         * Store size information about all SVs
            + TODO: CODE size does not take account of optree
         * Have dump_at_{END,SIGABRT,SIGQUIT} print to STDERR
         * Limit the capture size of PVs, but still note the full length
         * Dump FILE and LINE of CVs and GVs
         * Redrawn type icons

         * Fix for NVLEN=16 architectures

0.09    2013/11/22 00:25:17
         * Remove orphan count unit test as it is too unreliable

         * Sometimes a PAD(0) slot is NULL
         * ->identify is now a $pmat method
         * ->identify should load Inrefs tool
         * Try harder to clear PL_tmpsv when making an unreachable cycle

0.08    2013/11/10 19:27:30
         * Chase more fields of an HV's mro_meta
         * Document how Tools may interact with the UI
         * Allow Tools to register and use icons on the UI
         * Rework Reachability tool to analyse kinds of reachability
         * Move inrefs logic into its own new Inrefs Tool
         * Slight performance improvement to dumpfile loading
         * Display icons also for general SV type

         * Ensure ->find_symbol actually works for deeply-nested symbols

0.07    2013/11/08 01:33:01
         * Added new concept of Devel::MAT::Tool::* and Devel::MAT::UI
         * Implement SV type counting and reachability analysis Tools
         * Allow dumping on SIGABRT

         * Support perl 5.10
         * Support NVSIZE==16 architectures

0.06    2013/10/28 00:14:24
         * Don't yield constants from both anonymous subs -and- constix/constsv
         * Don't bother including all the PL_sv_undef lexnames

         * Remember to store padlist in pre-5.18 perls
         * PL_main_cv does not have a CvROOT(); need to use PL_main_root
           (fixes unit test failures on non-threaded perls)

0.05    2013/10/22 01:34:44
         * Added ->find_symbol and ->find_glob
         * Identify weakrefs in descriptions and in GTK explorer
         * All hashes have the backrefs AV field, not just stashes
         * Recognise import() options on D:M:Dumper
         * Grab padnames and pad AVs on 5.18
         * Added a toolbar with back/forward buttons in GTK explorer

         * Don't crash when ->identify'ing SVs that are stack temporaries

0.04    2013/10/09 23:23:27
         * Renamed dumpfile() to just dump()
         * Don't delete elided RVs; include both direct and via-RV outrefs

         * Start 'identify' with the initial SV already seen so it doesn't
           infinitely recurse
         * Remember to still fix up consts_at from constix on ithreaded 5.18
         * Need to check if SVs are actually magical (SvMAGICAL), not just
           potentially magical (>= SVt_PVMG)

0.03    CHANGES:
         * Altered handling of PADLISTs for perl 5.18.0
         * Ensure that UINTs and PTRs are written in correct platform sizes

0.02    CHANGES:
         * Bugfixes for non-threaded perls
         * Trace constants/GVs/etc... through optrees
         * Handle SVt_PVLV

0.01    First version, released on an unsuspecting world.