This middleware uses $SIG{__DIE__} to intercept all exceptions (run-time errors) happening in your
application, even those that are caught. For each exception it builds a detailed stack trace.
If the applications aborts by throwing an exception it will be caught and matched against the saved stack
traces. If a match is found it will be displayed as a nice stack trace screen, if not then the exception
will be reported without a stack trace.
The stack trace is also stored in the environment as a plaintext and HTML under the key
"plack.stacktrace.text" and "plack.stacktrace.html" respectively, so that middleware further up the stack
can reference it.
This middleware is enabled by default when you run plackup in the default development mode.
You're recommended to use this middleware during the development and use
Plack::Middleware::HTTPExceptions in the deployment mode as a replacement, so that all the exceptions
thrown from your application still get caught and rendered as a 500 error response, rather than crashing
the web server.
Catching errors in streaming response is not supported.
StackTraceModule
The Devel::StackTrace::WithLexicals module will be used to capture the stack trace if the installed
version is 0.08 or later. Otherwise Devel::StackTrace is used.
Performance
Gathering the information for a stack trace via Devel::StackTrace is slow, and
Devel::StackTrace::WithLexicals is significantly slower still. This is not usually a concern in
development and when exceptions are rare. However, your application may include code that's throwing and
catching exceptions that you're not aware of. Such code will run significantly slower with this module.