一些好的Perl调试方法是什么?

27

除了 Data::Dumperperl -d,还有其他调试 Perl 程序的方法吗?

18个回答

17

1
+WishPerl - 也是一个不错的选择 - joe

13

有很多工具可以帮助你:

  • Devel::Trace - 打印执行的每一行代码
  • Carp::REPL - 当代码抛出警告时,进入REPL*
  • Devel::ebug - 一个可以从Perl代码控制的调试器
  • Enbugger - 在运行时使用调试器,无论进程是否已启动调试
* REPL:交互式编程环境(Read-Eval-Print Loop)

1
REPL = 读取、求值、输出循环(等同于交互式解释器) - j_random_hacker

9

8

我使用 ActiveState Komodo 进行逐步调试。

Eclipse 具有其 EPIC 插件 的逐步调试器。

个人更喜欢 ActiveState 版本。它似乎更加稳定可靠,但需要付费(我的工作支付了费用)。如果是我的钱,那么我会使用 Eclipse 和 EPIC,因为它们是免费的。


6

最好的调试辅助是小型程序、短作用域、有限副作用和大量测试。在bug孵化之前停止它们。


5

我通常使用的工具有:

  • 对于简单情况,我使用打印语句和Data::Dumper
  • perl -d

这通常足够了。还有ddd;我听说它相当不错,但从未尝试过。

对于一些任务(并非真正的调试,但接近于此),我使用Devel::NYTProf


2
建议:将 s/Data::Dumper/Data::Dump/。它更加有营养。 - j_random_hacker

4

有些人使用print语句来查看在程序的某些部分中发生了什么,以此来检查变量在执行该部分时实际包含的内容。(即,作为检查在执行过程中特定变量的实际内容的一种方式。)


2
我喜欢使用“warn”而不是“print”,因为它可以发送到stderr而不是stdout。“print STDERR”也可以,但需要更多的打字。 - laalto

4
根据你的需求,Log::Log4perl 可以提供一个简单的方法来管理 'print' 调试风格,特别是在大型应用程序中:
  • 提供不同的日志级别(Debug, Info, Error, Warning 和 Fatal)
  • 从配置文件中控制(例如,在开发环境中进行调试,只在生产环境中记录错误)
  • 通过你的应用程序部分进行配置(例如,将 Web 应用程序记录在一个日志文件中,并将cron脚本记录在另一个具有不同日志级别的文件中)
  • 通过类进行配置 - 可以轻松静音嘈杂模块,或者在应用程序的深处添加详细的调试功能

大多数人在可以使用核心模块Log::Message的情况下,使用Log::Log4perl。 - MkV

3

毫无疑问,Emacs是最好的选择:

emacs my_script.pl
M-x perldb
< p > Emacs会提示您:

Run perldb (like this): perl my_script.pl
Hit enter (or add command line switches)

现在按照通常的方式使用调试器。

输入“c”继续执行代码,此时代码将会随着您的执行而被跟踪。

Emacs与其调试器完全集成,使得调试Perl代码几乎是轻而易举的。


3
Test::More用于编写基本测试,Hook::LexWrap,Test::MockObject,Test::Deep,Test::MockTime,Test::WWW::Mechanize和许多其他高级测试。
Attribute::Signature用于检查子参数。Carp::Assert用于基于合同的编程。
Devel::Ebug::Wx或Devel::ptkdb(以及Padre中即将提供更好的支持)可用于更轻松的调试。

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