回溯包含动态调用堆栈,通常导致异常抛出的点,并且是 Backtrace::Frame
对象的列表。其默认字符串化排除了被认为不必要或令人困惑的回溯帧;例如,默认情况下隐藏 &die
等例程。作为一个列表,您还可以访问各个元素。
sub zipi ;tryif ($!)
这将打印列表中的最后一个帧,指向发生它的行。
方法§
方法 new§
multi method new()multi method new(Int )multi method new(Mu \ex)multi method new(Mu \ex, Int )multi method new(List )multi method new(List , Int )
创建一个新的回溯,使用其调用位置作为回溯的起点或作为参数传递的 $offset
。如果传递了一个对象或一个列表(其中已经包含列表形式的回溯),它们将被用于当前代码。
my = Backtrace.new;
方法 gist§
multi method gist(Backtrace:)
返回字符串 "Backtrace(42 frames)"
,其中数字表示通过 list 方法可用的帧数。
方法 Str§
multi method Str(Backtrace:)
返回回溯的简洁字符串表示形式,省略标记为 is hidden-from-backtrace
的例程,并且根据实现的自由裁量权,还省略设置中的一些例程。
my = Backtrace.new;say .Str;
方法 next-interesting-index§
method next-interesting-index(Backtrace: Int = 0, :, :, :)
返回下一个 interesting
帧的索引,一旦考虑了隐藏和其他设置。$named
将决定是否仅打印那些有名称的帧,$noproto
将隐藏 proto
,并且 $setting
将隐藏那些被认为是设置的帧。
sub zipi ;try zipi;say $!.backtrace.next-interesting-index; # OUTPUT: «2»say $!.backtrace.next-interesting-index( :named ); # OUTPUT: «4»
方法 outer-caller-idx§
method outer-caller-idx(Backtrace: Int )
以列表形式返回调用当前帧的帧的索引。
sub zipi ;try zipi;say $!.backtrace.outer-caller-idx( 4 ); # OUTPUT: «[6]»
方法 nice§
method nice(Backtrace: :)
将回溯作为interesting 帧的列表返回。如果设置了 :$oneline
,将在第一个帧后停止。
sub zipi ;try zipi;say $!.backtrace.nice( :oneline ) if $!;# OUTPUT: « in sub zipi at /tmp/... line 1»
方法 full§
multi method full(Backtrace:)
返回回溯的完整字符串表示形式,包括隐藏帧、特定于编译器的帧以及设置中的帧。
my = Backtrace.new;say .full;
方法 list§
multi method list(Backtrace:)
返回此回溯的 Backtrace::Frame
对象的列表。
方法摘要§
method summary(Backtrace: --> Str)
返回通过 !.is-hidden && (.is-routine || !.is-setting)
过滤的回溯的摘要字符串表示形式。
此程序
sub innersub outerouter;
生成
in method new at SETTING::src/core.c/Backtrace.rakumod line 85 in sub inner at test.raku line 1 in sub outer at test.raku line 2 in block <unit> at test.raku line 3
方法 concise§
method concise(Backtrace:)
返回通过 !.is-hidden && .is-routine && !.is-setting
过滤的回溯的简洁字符串表示形式。
此程序
sub innersub outerouter;
生成
in sub inner at test.raku line 1 in sub outer at test.raku line 2
方法 map§
multi method map(Backtrace: --> Seq)
它对每个元素调用 &block
,并收集返回值并返回一个序列。
此程序
sub innersub outerouter;
生成
SETTING::src/core.c/Backtrace.rakumod: 85 SETTING::src/core.c/Backtrace.rakumod: 85 test.raku: 1 test.raku: 2 test.raku: 3 test.raku: 1
方法 flat§
multi method flat(Backtrace:)
返回与 list 相同的回溯。