web-dev-qa-db-ja.com

Perlスクリプトをデバッグするにはどうすればよいですか?

Perlスクリプトを実行するとき、どのようにデバッグできますか?たとえば、kshでは-xフラグを追加します。しかし、Perlで同じことをする方法は?

24
klod
Perl -d your_script.pl args

perlのデバッグ方法

12
DVK

対話型デバッガーを使用しても問題ない場合は、 perldebug を試すことができます。

8
Alex

Perlデバッガーでスクリプトを実行するには、-dスイッチを使用する必要があります。

Perl -d script.pl

しかし、Perlは柔軟です。それはいくつかのフックを提供し、あなたが望むようにデバッガを動作させることができます

したがって、異なるデバッガを使用するには、次のようにします。

Perl -d:DebugHooks::Terminal script.pl
# OR
Perl -d:Trepan script.pl

これらのモジュールを見てください here および here

Perlデバッガ内部にフックする最も興味深いPerlモジュールがいくつかあります: Devel :: NYTProfDevel :: Cover

そして 他の多く

7
Eugen Konkov

Perlデバッガー を使用することもお勧めします。

ただし、シェルの-x似たようなことを行う Devel :: Trace モジュールをご覧ください。

4
jmcnamara

最も効果的なデバッグツールは、まだ 慎重な考え であり、慎重に配置された印刷ステートメントと相まってです。

ブライアンカーニガン、「初心者のためのユニックス」(1979年)

(そして Data :: Dumper で印刷ステートメントを強化

1
Matthew Lock

リモートデバッグを行う場合(cgiの場合、またはデバッグコマンドラインで出力を台無しにしたくない場合)は、次を使用します。

与えられたテスト:

use v5.14;
say 1;
say 2;
say 3;

ターミナル1のホストとポート(ここではlocalhost:12345)でリスナーを開始します。

$ nc -v -l localhost -p 12345

readlineサポートには rlwrap を使用します(Perl -dも)

$ rlwrap nc -v -l localhost -p 12345

そして、別のターミナル(ターミナル2など)でテストを開始します。

$ PERLDB_OPTS="RemotePort=localhost:12345" Perl -d test

ターミナル1の入出力:

Connection from 127.0.0.1:42994

Loading DB routines from Perl5db.pl version 1.49
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(test:2): say 1;
  DB<1> n
main::(test:3): say 2;
  DB<1> select $DB::OUT

  DB<2> n
2
main::(test:4): say 3;
  DB<2> n
3
Debugged program terminated.  Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.  
  DB<2> 

ターミナル2の出力:

1

デバッグ端末に出力する場合は文に注意してください

select $DB::OUT

Vimユーザーの場合、このプラグインをインストールします。 dbg.vim Perlの基本的なサポートを提供します

1
albfan