假設我有一種情況,我試圖用一些Perl代碼進行實驗。如何重新運行子程序而無需在Perl的調試器中重新啓動腳本?
perl -d foo.pl
Foo.pl一班班是圍繞快樂的方式(這是一個很大的腳本),我決定我想通過它來重新運行一個特定的子程序和單步,而無需重新啓動的過程。我會怎麼做?
假設我有一種情況,我試圖用一些Perl代碼進行實驗。如何重新運行子程序而無需在Perl的調試器中重新啓動腳本?
perl -d foo.pl
Foo.pl一班班是圍繞快樂的方式(這是一個很大的腳本),我決定我想通過它來重新運行一個特定的子程序和單步,而無需重新啓動的過程。我會怎麼做?
調試器命令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
只是:func_name(args)
例如,
sub foo {
my $arg = shift;
print "hello $arg\n";
}
用Perl -d:
DB<1> foo('tom')
hello tom
響應編輯就想要重新步執行的子程序。
這並不完全是這樣做的最優雅的方式,但我沒有其他方法了我的頭頂部,並有興趣在其他人的回答這個問題:
my $stop_foo = 0;
while(not $stop_foo) {
foo();
}
sub foo {
my $a = 1 + 1;
}
調試器將繼續執行foo,但可以通過在調試器中執行'$ stop_foo ++'來停止下一個循環。
再說一遍,我並不覺得這是最好的方法,但它只是對已調試的代碼進行少量補充就完成了工作。
這是如何幫助您逐步完成子程序的? – mob 2009-09-29 05:24:08