2009-09-23 23 views

回答

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 
2

只是:func_name(args)

例如,

sub foo { 
    my $arg = shift; 
    print "hello $arg\n"; 
} 

用Perl -d:

DB<1> foo('tom') 
hello tom 
+0

這是如何幫助您逐步完成子程序的? – mob 2009-09-29 05:24:08

0

響應編輯就想要重新步執行的子程序。

這並不完全是這樣做的最優雅的方式,但我沒有其他方法了我的頭頂部,並有興趣在其他人的回答這個問題:

my $stop_foo = 0; 

while(not $stop_foo) { 
    foo(); 
} 

sub foo { 
    my $a = 1 + 1; 
} 

調試器將繼續執行foo,但可以通過在調試器中執行'$ stop_foo ++'來停止下一個循環。

再說一遍,我並不覺得這是最好的方法,但它只是對已調試的代碼進行少量補充就完成了工作。

相關問題