Perlスクリプトを実行するとき、どのようにデバッグできますか?たとえば、kshでは-x
フラグを追加します。しかし、Perlで同じことをする方法は?
Perl -d your_script.pl args
perlのデバッグ方法
対話型デバッガーを使用しても問題ない場合は、 perldebug を試すことができます。
Perlデバッガーでスクリプトを実行するには、-d
スイッチを使用する必要があります。
Perl -d script.pl
しかし、Perlは柔軟です。それはいくつかのフックを提供し、あなたが望むようにデバッガを動作させることができます
したがって、異なるデバッガを使用するには、次のようにします。
Perl -d:DebugHooks::Terminal script.pl
# OR
Perl -d:Trepan script.pl
これらのモジュールを見てください here および here
Perlデバッガ内部にフックする最も興味深いPerlモジュールがいくつかあります: Devel :: NYTProf 、 Devel :: Cover
そして 他の多く
Perlデバッガー を使用することもお勧めします。
ただし、シェルの-x
似たようなことを行う Devel :: Trace モジュールをご覧ください。
最も効果的なデバッグツールは、まだ 慎重な考え であり、慎重に配置された印刷ステートメントと相まってです。
(そして Data :: Dumper で印刷ステートメントを強化
リモートデバッグを行う場合(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の基本的なサポートを提供します