假设我遇到了尝试使用Perl代码的情况。
perl -d foo.pl
Foo.pl认为它是快乐的方式(这是一个很大的脚本),我决定我想重新运行一个特定的子程序并单步执行它,但不重新启动该过程。我该怎么做?
答案 0 :(得分:5)
调试器命令b method
在子例程的开头设置断点。
DB<1> b foo
DB<2> &foo(12)
main::foo(foo.pl:2): my ($x) = @_;
DB<<3>> s
main::foo(foo.pl:3): $x += 3;
DB<<3>> s
main::foo(foo.pl:4): print "x = $x\n";
DB<<3>> _
有时您可能必须使用包名来限定子例程名称。
DB<1> use MyModule
DB<2> b MyModule::MySubroutine
答案 1 :(得分:2)
只需执行:func_name(args)
e.g。
sub foo {
my $arg = shift;
print "hello $arg\n";
}
在perl -d:
DB<1> foo('tom')
hello tom
答案 2 :(得分:0)
回应有关想要重新执行子程序的编辑。
这并不是最优雅的做法,但我没有其他方法,我对其他人对这个问题的回答感兴趣:
my $stop_foo = 0;
while(not $stop_foo) {
foo();
}
sub foo {
my $a = 1 + 1;
}
调试器将继续执行foo,但您可以通过在调试器中执行'$ stop_foo ++'来停止下一个循环。
同样,我并不觉得这是最好的方式,但只需对调试代码进行少量添加即可完成工作。