The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
2.05   2024-01-08

- Added explicit boolean overloading for trace objects. Without this, Perl
  will use the object's string overloading and then check the truthiness of
  the returned string, which is a lot of extra work. This can produce
  significant slowdowns in some cases, as seen in
  https://github.com/plack/Plack/pull/697. Requested by Tatsuhiko
  Miyagawa. GH #23.


2.04   2019-05-24

- Add a partial workaround for "Bizarre copy" errors (GH #11) that come when
  attempting to look at arguments in the call stack. This is only a partial
  fix as there are cases that can lead to a SEGV. Ultimately this needs to be
  fixed in the Perl core. See
  https://rt.perl.org/Public/Bug/Display.html?id=131046 for relevant
  discussion. Fixed by pali. GH #21.


2.03   2017-11-18

- If all frames in the trace were skipped (via skip_frames, frame_filter,
  ignore_*, etc.), then the stringified stack trace would be an empty
  string. Now this has been changed to always return the message given to the
  constructor or the string "Trace begun". Fixes GH #15, reported by Karen
  Etheridge.


2.02   2016-12-07

- Switch to GitHub Issues.

- Some small pod fixes.


2.01   2016-03-02

- Fixed the frames method when it is called with arguments. Previously this
  did not work if it was called before the method was called as a
  reader. Fixed by Mark Fowler. PR #8.


2.00   2014-11-01

[BACKWARDS INCOMPATIBILITIES]

- The no_refs constructor parameter is now deprecated, and has been replace by
  a new unsafe_ref_capture parameter that defaults to false, meaning no
  references are captured by default. Capturing references by default caused
  too many issues that couldn't be worked around, including running DESTROY
  blocks multiple times on captured objects in the worst case.

- Removed support for the long-deprecated no_object_refs constructor parameter
  (deprecated in 2002!).


1.34   2014-06-26

- Fixed use of // operator (my use, not Graham's) in previous release.


1.33   2014-06-26

- Added a skip_frames option. This causes the stack trace to skip an arbitrary
  number of frames. Patch by Graham Knopp. PR #5.


1.32   2014-05-05

- Added a filter_frames_early option to filter frames before arguments are
  stringified. Added by Dagfinn Ilmari Mannsåker. PR #4.


1.31   2014-01-16

- No code changes, just doc updates, including documenting the as_string()
  method in Devel::StackTrace::Frame. Requested by Skef. RT #91575.


1.30   2012-11-19

- There was an eval which did not first localize $@ and $SIG{__DIE__}. This
  broke Plack::Middleware::StackTrace (and possibly other tihngs).


1.29   2012-11-16

- The Devel::StackTrace->frames() method is now read-write. This allows you to
  do more complex filtering of frames than is easily possible with the
  frame_filter argument to the constructor. Patch by David Cantrell.


1.28   2012-11-16

- Allow arguments to a trace's as_string method, specifically max_arg_length
  Patch by Ricardo Signes.

- Added a no_args option to the constructor in 1.26 but forgot to mention it
  in Changes. Requested by Scott J. Miller. RT #71482.


1.27  2011-01-16

- Skip some tests on 5.13.8+ that are no longer relevant because of a change
  in the Perl core. Reported by Andreas Koenig. RT #64828.


1.26  2010-10-15

- The as_string method did not localize $@ and $SIG{__DIE__} before doing an
  eval. Reported and tested by Marc Mims. RT #61072.


1.25  2010-09-06

- Devel::StackTraceFrame was not actually subclassing
  Devel::StackTrace::Frame. Patch by Tatsuhiko Miyagawa.


1.24  2010-09-03

- Version 1.23 was missing a $VERSION assignment. Reported by Sergei
  Vyshenski.

- Moved the frame object to its own file, and renamed it
  Devel::StackTrace::Frame. The old package name, Devel::StackTraceFrame, is
  now a subclass of the new package, to provide a backwards compatibility
  shim.


1.23  2010-08-27

- Added message and indent constructor parameters. Based on a patch by James
  Laver. RT #59830.


1.22  2009-07-15

- Apparently, overload::StrVal on older Perls (5.8.5, but not 5.8.8)
  tried to call a stringification method if it existed. So now,
  Devel::StackTrace just uses overload::AddrRef instead, which should
  always be safe. Reported by Michael Stevens. Fixes RT #47900.


1.21  2009-07-01

- Overloaded objects which didn't provide a stringification method
  cause Devel::StackTrace to die when respect_overload was
  true. Reported by Laurent Dami. RT #39533.

- Added a frame_filter option which allows for fine-grained control
  over what frames are included in a trace. Based on (but expanded)
  from a patch proposed by Florian Ragwitz. RT #47415.


1.20  2008-10-25

- The change in 1.15 to object creation broke the no_refs feature,
  causing references to be stored until the trace's frame objects were
  created.

* Exception::Class objects are always stringified by calling
  overload::StrVal().


1.1902  2008-07-16

- This release just contains another test fix.

- The new tests for bad utf-8 apparently fail with any Perl before
  5.8.8. Reported by Lee Heagney. RT #37702.


1.1901  2008-06-13

- This release just contains a test fix.

- The new tests for bad utf-8 fail with Perl 5.8.x where x <=
  6. Apparently, utf-8 was just more broken back then. Reported by
  Andreas Koenig's smokebots.


1.19  2008-06-13

- Dropped support for Perl 5.005.

- If a function was in stack trace had been called with invalid utf-8
  bytes, this could cause stringifying a stack trace to blow up when
  it tried to stringify that argument. We now catch those (and other)
  errors and simply put "(bad utf-8)" or "?" in the stringified
  argument list. Reported by Alex Vandiver.


1.18  2008-03-31

- Fix a test failure on Win32. No changes to the non-test code.


1.17  2008-03-30

- Added a max_arg_length parameter, which if set causes
  Devel::StackTrace to truncate long strings when printing out a
  frame. RT #33519. Patch by Ian Burrell. 


1.16  2008-02-02

- A test fix for bleadperl. The value of wantarray from caller() needs
  to be treated as a boolean, as opposed to expecting 0 (vs
  undef). RT #32583. Patch by Jerry Hedden.


1.15  2007-04-28

- Changed how objects are created in order to greatly speed up the
  constructor. Instead of processing all the stack trace data when the
  object is first created, this is delayed until it is needed. This
  was done in order to help speed up Exception::Class. There are cases
  where code may be throwing many exceptions but never examining the
  stack traces.

  Here is a representative benchmark of object construction for the
  old code versus the new code:

          Rate  old  new
    old 1764/s   -- -76%
    new 7353/s 317%   --


1.14  2007-03-16

- Added a few micro-optimizations from Ruslan Zakirov, who is hoping
  this will ultimately help speed up RT.


1.13  2006-04-01

- Add another fix for filename handling in the tests. Tests were
  giving false failures on Win32 because the tests needed to use
  File::Spec->canonpath(), just like Devel::StackTrace does
  internally.


1.12  2005-09-30

- Newer versions of Perl use Unix-style filenames when reporting the
  filename in caller(), which breaks Exception::Class tests on other
  platforms, and is just kind of funky.  This module now calls
  File::Spec->canonpath() to clean up the filename in each frame.
  Reported by Garret Goebel.


1.11  2004-04-12

- No code changes, just switching to including a Makefile.PL that uses
  ExtUtils::MakeMaker instead of one that sneakily uses Module::Build.
  Requested by Perrin Harkins.


1.10  2004-03-10

- Silence a warning from the test code if Exception::Class isn't
  installed.  Reported by Stefano Ruberti.

- Localize $@ to avoid overwriting a previously set $@ while creating
  a Devel::StackTrace object.  This caused a test failure in the
  Exception::Class tests when run with Perl 5.6.1, but not with 5.8.3.
  I don't really know how to test for it outside of Exception::Class.
  Reported by Jesse Erlbaum.


1.09  2004-02-26

- The overload workaround blows up if a DBI handle is anywhere in the
  stack, because of a bad interaction between overload::Overloaded and
  DBI's custom dispatching.  This release works around that.


1.08  2004-02-23

- Some tests failed on Win32 because they were hardcoded to expect a
  file name with forward slashes.  Reported by Steve Hay.


1.07  2004-02-21

- This release includes a change to the overload handling that is
  necessary for cooperation with Exception::Class.


1.06  2004-02-21

- Devel::StackTrace now uses overload::StrVal() to get the underlying
  string value of an overloaded object when creating a stack frame for
  display.  This can be turned off by setting respect_overload to a
  true value.  Suggested by Matt Sisk.


1.05  2004-02-17

- Devel::StackTrace incorrectly reported that arguments were being
  passed to eval blocks (which isn't possible).  Reported by Mark
  Dedlow.


1.04  2003-09-25

- The special handling of Exception::Class::Base objects was broken.
  This was exposed by the fact that Exception::Class 1.15 now uses
  Devel::StackTrace in a slightly different way than it did
  previously.


1.03  2003-01-22

- Special handling of Exception::Class::Base objects when stringifying
  references.  This avoids infinite recursion between the two classes.


1.02  2002-09-19

- Forgot to add Test::More to PREREQ_PM for previous releases.


1.01  2002-09-18

- Change the "no object refs" feature to be a plain old "no refs"
  feature.  As was pointed out to me by Jean-Phillippe Bouchard, a
  plain reference (to an array, for example), can easily hold
  references to objects internally.  And since I'm not going to bother
  descending through nested data structures weeding out objects, this
  is an easier way to handle the problem.  Thanks to Jean-Phillippe
  Bouchard for a patch for this as well.

  The "no_object_refs" parameter is deprecated, and now does the same
  thing as the "no_refs" parameter.


1.00  2010-10-15

- Add an option to not store references to objects in stack frames.
  This can be important if you're expecting DESTROY to be called but a
  Devel::StackTraceFrame object is still holding a reference to your
  object(s).  Based on discussion with Tatsuhiko Miyagawa.


0.9   2001-11-24

- Doc tweaks.


0.85  2000-09-02

- doc bug fix that made it seem like args method was only available
  under Perl 5.6.0

- converted objects from pseudo-hashes to regular hashes.


0.8   2000-09-02

- Should work under Perl 5.6.0+.

- Added hints & bitmask methods for use under Perl 5.6.0.


0.75  2000-06-29

- Added frames method (and docs for it).

- Added 'use 5.005' which I should have put in there earlier.

- DOCS: explanation of 'top' and 'bottom' as they refer to the stack.


0.7   2000-06-27

- First release (I think)