Debugging 在perl 6中是否有一种规范的方法来打印堆栈跟踪?

Debugging 在perl 6中是否有一种规范的方法来打印堆栈跟踪?,debugging,raku,Debugging,Raku,在Perl5中,我将使用任何Carp函数。在perl 6中,搜索没有任何帮助,并且将打印所有堆栈,而不仅仅是我想要的堆栈。我只能使用抛出异常、捕获异常并打印异常的老方法: try { X::AdHoc.new(payload => 'Stack').throw; CATCH { when X::AdHoc { .say; } } } 或者,稍微懒惰一点: { die; CATCH { default { .say } } } 正确的方法是什么?我在写这个

在Perl5中,我将使用任何Carp函数。在perl 6中,搜索没有任何帮助,并且将打印所有堆栈,而不仅仅是我想要的堆栈。我只能使用抛出异常、捕获异常并打印异常的老方法:

try {
    X::AdHoc.new(payload => 'Stack').throw;
    CATCH { when X::AdHoc { .say; } }
}
或者,稍微懒惰一点:

{
    die;
    CATCH { default { .say } }
}

正确的方法是什么?

我在写这个问题的时候找到了答案,并决定把它贴在这里,因为它在我以前的任何搜索中都没有出现。Perl 6的类将获得堆栈跟踪并将其转换为字符串:

say "Stack: " ~ Backtrace.new;

(使用
Backtrace.new.full
查看通常隐藏的其他低级堆栈帧。)

@ChristopherBottoms就是这样
Backtrace.new.Str
以字符串形式给出当前堆栈跟踪。记录它,存储它,解析它。(但是如果你正在解析它,你不会调用
.Str
。你会访问
回溯
对象的其他方法。)哦,好的。您只想检查代码中某个特定位置的堆栈跟踪,而不必实际抛出异常。@例如,ChristopherBottoms Right可以从较高的层次了解函数被调用两次的原因。通常用于调试,而不是生产日志记录。