Files
NAME
Backtrace::Files - turn backtrace into list of files / lines
SYNOPSIS
use Backtrace::Files;
.say for backtrace-files($backtrace, :context(2));
DESCRIPTION
Backtrace::Files attempts to provide an abstract interface to the files
in which an execution error occurred. It exports a single subroutine
backtrace-files
, which produces a list of filename and lines.
EXPORTED SUBROUTINES
backtrace-files
# show file / linenrs of given backtrace
for backtrace-files($backtrace) -> (:key($file), :value(@lines)) {
say "$file: @lines.join(',')";
}
# show file / linenrs / actual lines of given backtrace
for backtrace-files($backtrace, :source) -> (:key($file), :value(@lines)) {
say "$file:";
for @lines -> (:key($linenr), :value($line)) {
say "$linenr: $line";
}
say "";
}
The backtrace-files
subroutine accepts a single positional argument,
the source of the backtrace information. This can either be an
IO::Handle
object, an IO::Path
object, or a string.
By default, the backtrace-files
subroutine produces a list of Pair
s
of which the key is the absolute filename, and the value is a list of
line numbers of consecutive frames within the same file. Please note
that the same filename can occur more than once, if not all calls to
code in a file where consecutive in the backtrace.
The following optional named arguments can be specified to include the actual source of the lines as well:
:source
Indicates whether the actual source of the lines referred to in the
backtrace, should be included as well. If specified with a true value,
then each line number will be converted into a Pair
with the line
number as the key, and the actual line as the value (or an empty string
if the line could not be obtained for whatever reason).
:context(N)
Indicates whether extra source lines should be added before and after
the actual line number of the backtrace. Only makes sense if :source
has been specified with a true value. If specified, indicates the
number of lines that should be added before and after, as additional
Pair
s in the array keyed to the filename. Defaults to no lines
being added.
:before-context(N)
Indicates whether extra source lines should be added before the actual
line number of the backtrace. Only makes sense if :source
has been
specified with a true value. If specified, indicates the number of
lines that should be added before, as additional Pair
s in the array
keyed to the filename. Defaults to whatever was (implicitely) specified
with :context
.
:after-context(N)
Indicates whether extra source lines should be added after the actual
line number of the backtrace. Only makes sense if :source
has been
specified with a true value. If specified, indicates the number of
lines that should be added after, as additional Pair
s in the array
keyed to the filename. Defaults to whatever was (implicitely) specified
with :context
.
:in-backtrace(Type)
Indicates the actual type that should be used to create Pair
s of
line number and actual source for lines that actually occurred in the
backtrace. Only makes sense if :source
has been specified with a
true value. Defaults to Pair
.
:added-context(Type)
Indicates the actual type that should be used to create Pair
s of
line number and actual source for lines that actually occurred in the
backtrace. Only makes sense if :source
has been specified with a
true value. Defaults to Pair
.
AUTHOR
Elizabeth Mattijsen <[email protected]>
Source can be located at: https://github.com/lizmat/Backtrace-Files . Comments and Pull Requests are welcome.
If you like this module, or what Iām doing more generally, committing to a small sponsorship would mean a great deal to me!
COPYRIGHT AND LICENSE
Copyright 2022 Elizabeth Mattijsen
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.