Revision history for Devel-MAT
0.53 2024-03-07
[CHANGES]
* Read PMAT file format 0.6 with its shared HEK pointer additions
* Added `strtab` command for analysing the PL_strtab shared strings
table
* 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
[CHANGES]
* 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
[BUGFIXES]
* 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
[BUGFIXES]
* Don't crash when loading files that claim non-existent SVs are
mortalized
0.50 2023-03-03
[CHANGES]
* Improved tree-forming algorithm in `pmat-diff` that produces better
output shapes
* Annotate SVs as being mortalized if the dumpfile contains that
information
[BUGFIXES]
* 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
(RT146630)
0.49 2022-10-03
[CHANGES]
* 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
[BUGFIXES]
* Ensure that `packages` command doesn't get upset about non-globs in
the toplevel stash
0.48 2022-08-30
[CHANGES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* '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
[CHANGES]
* 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
[CHANGES]
* Add support for perl 5.35's boolean types
* Added a nice shiney new icon for BOOL SV type
0.44 2021-03-27
[CHANGES]
* 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
[CHANGES]
* 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
lexicals
* 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"
[BUGFIXES]
* Fix `find blessed` command (RT131079)
0.42 2019-03-21 22:36:09
[CHANGES]
* 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
[CHANGES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Don't collide .pmat files during parallel build testing (RT126041)
0.39 2018-08-09 13:37:24
[BUGFIXES]
* Fix unit test script for now-removed tool file (RT125994)
0.38 2018-08-02 17:47:44
[CHANGES]
* 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
[CHANGES]
* 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
[CHANGES]
* Migrated Devel::MAT::Dumper into its own distribution
0.35 2018-07-03 14:58:53
[CHANGES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Fix for Sizes tool to use $cv->padnames_av (RT124834)
0.33 2018-01-23 01:22:25
[CHANGES]
* 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
[CHANGES]
* 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
[CHANGES]
* Annotate each root SV with its rootname in formatted output
* Expanded userguide docs
[BUGFIXES]
* 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
[CHANGES]
* Migrate `pmat-sizes` and `pmat-find-pv` stand-alone scripts into
Tool commands
* Move the 'io find' tool to 'find io'
[BUGFIXES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Capture the string values from the shared string table
0.28 2017-10-10 00:55:37
[CHANGES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* 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()
(RT117842)
0.24 2016/06/03 19:07:47
[CHANGES]
* 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
[CHANGES]
* 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;
App-Devel-MAT-Explorer-GTK
0.22 2016/03/16 16:22:19
[CHANGES]
* Added a simple script to find PVs by content
* Updated documentation to =head2 barename style
[BUGFIXES]
* 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
[CHANGES]
* 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
(RT108094)
+ 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
[BUGFIXES]
* 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
[CHANGES]
* Allow serial-numbering of .pmat files in the Dumper
* Totally refactored $pmat->identify to return an abstract Graph
structure
* 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
[CHANGES]
* 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
[CHANGES]
* 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
[CHANGES]
* Also dump SvUTF8() flag of PVs
* Added pmat-cat-svpv
[BUGFIXES]
* Don't crash on NULL PADLIST elements (RT92290)
0.16 2014/01/15 18:18:53
[CHANGES]
* 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
[BUGFIXES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Avoid infinite loop in $pmat->identify in cyclic cases
* Fix docs on ->rv method (RT92122)
0.14 2014/01/04 20:25:16
[CHANGES]
* 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
[BUGFIXES]
* Fix for 5.10.0
0.13 2013/12/06 21:37:35
[CHANGES]
* 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
twice
[BUGFIXES]
* Add List::UtilsBy to requirements
* Our version of dopoptosub_at() doesn't need aTHX_
0.12 2013/12/03 15:18:43
[CHANGES]
* 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
explorer
* 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
[BUGFIXES]
* require() tool .pm files automatically when calling ->load_tool
0.11 2013/11/28 14:30:32
[CHANGES]
* 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
[BUGFIXES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Fix for NVLEN=16 architectures
0.09 2013/11/22 00:25:17
[CHANGES]
* Remove orphan count unit test as it is too unreliable
[BUGFIXES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Ensure ->find_symbol actually works for deeply-nested symbols
0.07 2013/11/08 01:33:01
[CHANGES]
* Added new concept of Devel::MAT::Tool::* and Devel::MAT::UI
* Implement SV type counting and reachability analysis Tools
* Allow dumping on SIGABRT
[BUGFIXES]
* Support perl 5.10
* Support NVSIZE==16 architectures
0.06 2013/10/28 00:14:24
[CHANGES]
* Don't yield constants from both anonymous subs -and- constix/constsv
lists
* Don't bother including all the PL_sv_undef lexnames
[BUGFIXES]
* 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
[CHANGES]
* 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
[BUGFIXES]
* Don't crash when ->identify'ing SVs that are stack temporaries
0.04 2013/10/09 23:23:27
[CHANGES]
* Renamed dumpfile() to just dump()
* Don't delete elided RVs; include both direct and via-RV outrefs
[BUGFIXES]
* 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.