如何调试Perl脚本?

40
当我运行一个Perl脚本时,如何进行调试?例如,在ksh中,我会添加-x标志。但是在Perl中怎么做?
8个回答

23
perl -d your_script.pl args

这是如何调试Perl的方法。它会将您进入一个交互式的类似gdb的命令行调试器。


2
Alex的回答中包含了-d选项的文档链接。 - DVK
11
步骤1:在脚本顶部添加use strict; use warnings;。如果这不起作用,请进行步骤2:使用perl -d命令。 - Graeme Perrow

13

要在Perl调试器下运行您的脚本,您应该使用-d选项:

perl -d script.pl

但是Perl很灵活。它提供了一些钩子,你可以强制调试器按照你的意愿工作。

因此,要使用不同的调试器,您可以执行以下操作:

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

看看这些模块 这里这里

有几个非常有趣的Perl模块钩入了Perl调试器内部: Devel::NYTProfDevel::Cover

还有许多其他模块


2
我发现Devel::NYTProf在识别和加速我的Perl代码中的慢点方面非常有价值。 - Matthew Lock
@MatthewLock 是的,Devel::NYTProf是一件很棒的东西。 - Eugen Konkov

10
如果您可以使用交互式调试器,您可以尝试perldebug。请查看perldebug了解更多信息。

5
我建议您使用Perl调试器。但是,如果您想了解类似于shell的-x的东西,请查看Devel::Trace模块,它可以实现类似的功能。

4
使用 EclipseEPIC: 它为您提供一个不错的集成开发环境,具有调试功能,包括设置断点以及用于检查变量值的 Perl Expression View

3
如果您想进行远程调试(针对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>

第二个终端的输出:

1

请注意,如果您希望在调试终端上输出结果,请记住此句话。
select $DB::OUT

如果你使用 Vim,安装这个插件:dbg.vim,它可以为 Perl 提供基本支持。

https://github.com/albfan/dbg.vim 不再支持 pdb。 - Dave Smith

2

这里有一个关于Perl调试器的不错的小辩论:http://www.perlmonks.org/?node_id=48579 - Matthew Lock
1
链接已失效。请检查您的答案。 - Eugen Konkov
4
简而言之,Perl 希望你编写的代码像是在 1979 年编写的? - Dan Walmsley
3
以下是一种更有效的调试方式:根本不要编程。现在,让我们回到现实世界。 - Rolf
1
我希望你能理解,如果有人问类似“如何调试Perl”的问题,那很可能是因为“仔细思考”的工具在第一时间就失败了。 - ncite

2
注意,Perldebugger也可以从脚本的shebang行调用,这就是我大多数使用你提到的-x标志来调试shell脚本的方式。 #! /usr/bin/perl -d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接