2012-01-19 4 views
17

私のPerlプログラムは次のようになります。 foo/bar/test.pmにsubをデバッグします。そのサブにブレークポイントを設定するには?Perlプログラムで特定のファイルにブレークポイントを設定する方法は?</p> <pre><code>foo/ foo/bar/ for/bar/test.pm foo.pm foo/bar.pm test.pl </code></pre> <p>、プログラムを起動する<code>perl test.pl</code>を使用します。

どうすればいいですか?

ありがとうございました。

+2

私が提供答えに満足していませんよ。特定のファイルの特定の行で改行するために必要な 'b [ln]'構文は何ですか? – Adrian

答えて

22

perlスクリプトをデバッグするには、-dスイッチを使用してデバッガを起動します。デバッガ内

perl -d test.pl 

あなたは現在のファイルにブレークポイントを設定するb <line no>を使用することができます。時にはそれがまだロードされていないか、それは長い時間前にロードされたファイルにブレークポイントを設定する手間はあるので、あなたはまた、任意のPerlプログラムのどこに行

$DB::single = 1; 

を置く、とすることができますデバッガはその行を実行した直後に中断します。これは、コンパイル時に実行されるコードにブレークポイントを設定するための良い方法(唯一の方法ですか?)です。

+3

注目すべき点は、デバッガの 'f'コマンドは 'f /Path/To/Module.pm'のようにファイル名の表示に切り替わります。ファイルはすでにロードされている必要があります。次に、サブルーチンのエントリポイントだけでなく、そのファイルの有効な行にブレークポイントを設定することができます。 – amp108

+2

'$ DB :: single = 1;'いずれかのために働いていますか?それは私が推測するコントロールを停止していない – Bathakarai

+0

@Bathakaraiは私のために働いた。 –

9

だけbの引数としてサブの完全修飾名を使用します。

b foo::bar::test::subname 

例:

$ perl -d -e'use CGI; CGI->new' 
... 
main::(-e:1): use CGI; CGI->new 
    DB<1> b CGI::new 
    DB<2> r 
CGI::new(.../CGI.pm:337): 
337:  my($class,@initializer) = @_; 
    DB<2> q 
+0

これはOPの質問に対する実際の答えです。 (私はすでにこれを知っていて、他の回答で示された情報を実際に探していました)。 –

関連する問題