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)