[英]How can I debug a Perl script?
当我运行 Perl 脚本时,如何调试它? 例如,在 ksh 中我添加了-x
标志。 但是我如何在 Perl 中做同样的事情呢?
perl -d your_script.pl args
这就是调试 Perl 的方式。 它使您进入交互式gdb
风格的命令行调试器。
要在 Perl 调试器下运行您的脚本,您应该使用-d
开关:
perl -d script.pl
但是 Perl 是灵活的。 它提供了一些钩子,你可以强制调试器按照你的意愿工作
所以要使用不同的调试器,你可以这样做:
perl -d:DebugHooks::Terminal script.pl
# OR
perl -d:Trepan script.pl
有几个最有趣的 Perl 模块挂接到 Perl 调试器内部: Devel::NYTProf和Devel::Cover
还有很多其他的。
如果您可以使用交互式调试器,您可以尝试perldebug 。
我还建议使用Perl 调试器。
但是,由于您询问了 shell 的-x
之类的问题,请查看Devel::Trace模块,它执行类似的操作。
如果你想做远程调试(对于 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 提供基本支持。
最有效的调试工具仍然是仔细思考,加上明智地放置打印语句。
(并使用Data::Dumper增强打印语句)
请注意, Perldebugger也可以从 scripts shebang 行调用,这就是我主要使用您引用的-x
标志来调试 shell 脚本的方式。
#! /usr/bin/perl -d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.