核心调试功能§

trace 实用程序§

trace 实用程序导致程序逐行打印出执行了哪些行

use trace;
sub foo { say "hi" }
foo;
# OUTPUT: 
# 2 (/tmp/script.raku line 2) 
# sub foo { say "hi" } 
# 5 (/tmp/script.raku line 3) 
# foo 
# 3 (/tmp/script.raku line 2) 
# say "hi" 
# hi

Dumper 函数 (dd)§

[1]

Tiny Data Dumper:此函数获取变量的输入列表,并以易于阅读的格式在 $*ERRnote它们,同时还有变量的name。例如,这会将作为参数传递的变量打印到标准错误流

my $a = 42;
my %hash = "a" => 1"b" => 2"c" => 3;
 
dd %hash$a;
#`( OUTPUT:
    Hash %hash = {:a(1), :b(2), :c(3)}
    Int $a = 42
)

请注意,dd 将忽略命名参数。你可以使用 CaptureArray 来强制它转储传递给它的所有内容。

dd \((:a(1), :b(2)), :c(3));
dd [(:a(1), :b(2)), :c(3)];

如果你根本不指定任何参数,它只会将当前子例程/方法的类型和名称打印到标准错误流

sub a { dd }a   # OUTPUT: «sub a()␤» 

这可以作为一个廉价的跟踪函数派上用场。

使用回溯§

Backtrace 类获取当前调用堆栈,并可以将其作为字符串返回

my $trace = Backtrace.new;
sub inner { say ~Backtrace.new}
sub outer { inner}
outer;
 
# OUTPUT: 
# raku /tmp/script.raku 
#   in sub inner at /tmp/script.raku line 2 
#   in sub outer at /tmp/script.raku line 3 
#   in block <unit> at /tmp/script.raku line 4

环境变量§

有关更多信息,请参阅 Raku 环境变量从命令行运行 rakudo

生态系统调试模块§

Rakudo(Raku 编译器)至少有两种有用的调试器和两种跟踪器可用。有关这些模块的更多信息,请参阅其文档。

从历史上看,其他模块已经存在,而其他模块很可能在未来编写。请查看 Raku 模块 网站以获取更多此类模块。

Debugger::UI::CommandLine§

Rakudo 的命令行调试器前端。此模块安装 raku-debug-m 命令行实用程序,并与 Rakudo Star 发行版捆绑在一起。请查看 其存储库 以获取说明和教程。

Grammar::Debugger(以及同一发行版中的 Grammar::Tracer§

对 Raku 语法的简单跟踪和调试支持。

Trait::Traced§

这提供了is traced特性,它会自动追踪应用该特性的任何功能的使用情况。应用该追踪的任何功能以及追踪如何处理都是可定制的。有关其工作原理的更多信息,请参阅其文档。

1 [↑] 此例程是 Rakudo 特有的调试功能,不是标准 Raku。