如何用 Eclipse 调试 Perl 应用程序

本文介绍了如何使用 Eclipse 的 EPIC 插件调试 Perl 应用程序,包括导入和处理现有项目、遍历大型项目、设置断点、单步调试以及调试 CGI 应用程序。EPIC 提供了集成的 Perl 调试环境,支持正则表达式测试和 CGI 脚本调试,提高了 Perl 开发和调试的效率。
摘要由CSDN通过智能技术生成

如何用 Eclipse 调试 Perl 应用程序

8/14/2010 11:30:36 PM
开始之前

  本教程将介绍 Eclipse 的 EPIC 插件提供的调试功能,该插件提供了功能丰富的调试环境 —— 可为 EPIC Perl 开发环境所用且与此开发环境相集成。本教程假设读者了解 Eclipse 环境,并且有使用 Perl 的经验。

  关于本教程

  EPIC 结合了两种有助于 Perl 应用程序测试流程的系统:RegExp 和调试器。RegExp 是一个测试 Perl 正则表达式的接口。正则表达式是许多 Perl 应用程序的主要组成部分,但保证表达式的正确性是一个非常复杂的问题。使用 EPIC RegExp 视图,您可以根据已知数据检查结果,测试并修改正则表达式。

  EPIC Perl 调试器是一种较为传统的工具,完全集成于 Eclipse 环境之中。除测试本地化脚本外,EPIC 调试器还可用于调试 Web 及远程执行 Perl 脚本,因此是多种环境下的理想工具。

  本教程将介绍如何导入和移动大型应用程序、如何简化应用程序视图以使代码更易于理解,从而也更易于调试。另外还会介绍 EPIC 调试环境,它完全位于 Eclipse 内部,为标准脚本、CGI 脚本和正则表达式提供了一个完整的调试环境。

  前提条件

  要开始使用 EPIC,需要满足以下前提条件:

  Eclipse V3.1 或 3.0

  Java™ 技术 V1.3、1.4 或更高版本

  Perl V5.8.6 或更高版本。绝大多数 UNIX®、Linux® 安装及 Mac OS X 中都包含 Perl。Windows® 上使用 ActivePerl。

Eclipse 的 EPIC 插件

  PadWalker Perl 模块。ActiveState 版本 也可。

  传统 Perl 调试技术

  在介绍 EPIC 之前,让我们首先来看看 Perl 所使用的传统调试技术,这些技术随时可用,并且确实有一些优点。但它们也有着自身的局限性。理解其局限性有助于您理解为何需要一种更好的调试环境。

  Perl 中的调试简介

  如果您问一位典型的 Perl 程序员怎样调试其应用程序,他多半会告诉您他只是使用简单的输出语句,在程序执行时转储信息。例如,您可向循环中添加一条简单的语句,来输出您正在计算或处理的值,如清单 1 所示。


清单 1. 使用输出语句进行调试
 
my $sth = $dbh->prepare($query); 
 
$sth->execute(); 
 
while(my $row = $sth->fetchrow_hashref()) 
{ 
  print STDERR Dumper($row); 
 
  printf('%s, %s (%s)<br/>', 
      $row->{album}, 
      $row->{artist}, 
      $row->{genre}); 
} 
$sth->finish(); 

  在这种情况下,您已输出了从数据库 (MySQL) 载入到 STDERR 的行转储。STDERR 使用起来非常方便,这是因为在 UNIX 主机上,您可将 STDERR 的输出重定位到日志文件,同时使其他输出照常定位到标准输出。

  示例中的 Dumper() 函数会实际输出任何变量的结构,包括嵌入式和嵌套的数组、散列及其他内容。输出格式与您手动生成的结构形式相同。此函数(Data::Dumper 模块的一部分)非常有用,既可作为以适于人类阅读的格式输出变量的方法,也可用于写入一个能读回的结构,使用 eval() 可重新创建一个新变量。

 事后调试

  在应用程序运行时,利用输出信息的输出函数这种方式正是事后调试的一个例子。此时您并未实际监控应用程序的执行,也没有尝试找出应用程序运行过程中的问题,而是将信息转储出来,并等待执行完成。

  在交互式调试难以实现的情况下,这一特殊的调试方法广受人们的欢迎。例如,实时调试 CGI 应用程序基本上是不可能实现的,因为应用程序在远程服务器上执行,且由第二应用程序(Web 服务器)执行。不可能实时监控脚本执行。

  因此,事后调试有其用武之地,但也有一些显而易见的局限性。举例来说,在不更改代码的情况下,您无法监控任何变量,而一旦更改了代码,您就必须再次运行程序,以获得期望的输出。

  同样,您无法逐行单步调试程序的执行。必须运行整个应用程序,除非您强行停止它。如果要跟踪函数调用和序列,就需要添加输出语句,以显示作出的是怎样的决策,并显示顺序与序列,除此之外,别无他法可监控或获得信息。

  实时调试

  有多种实时调试系统(Perl 自带的调试器就是其中之一),您可从使用 -d 命令行选项入手(参见清单 2)。该命令行选项会启动一个交互式会话,通过此会话即可逐行单步调试、跳过代码段、监控变量和值,甚至在执行过程中修改值。


清单 2. 使用 Perl 调试器
 
$ perl -d -e 0 
 
Loading DB routines from perl5db.pl version 1.28 
Editor support available. 
 
Enter h or 'h h' for help, or 'man perldebug' for more help. 
 
main::(-e:1):  0 

本例中的文本界面很清晰,但依然难以理解发生了什么事、显示了什么信息、当前在代码特定部分中的哪处执行。

  有一些 GUI 可供 Perl 调试器使用,但通过这些界面能实现的功能依然有限。最重要的是,通过这样的界面调试 Web 应用程序非常困难。

  无论在哪种情况下,上述调试系统的主要局限性均在于:它们都是您必须添加到编程工具箱中的其他工具。但任何一种都未为您的开发环境提供集成化的解决方案。

  这正是 Eclipse/EPIC Perl 调试器发挥巨大优势的场合。它内置于 Eclipse 系统之中,因此,允许您在同一应用程序内同时实现开发、编辑和调试。

  在 EPIC 中导入和处理现有项目

  上面已经介绍了传统的 Perl 调试技术,现在是 EPIC 登场的时候了,下面将介绍在项目中遍历的方法 —— 对于代码执行和调试来说,这是一项至关重要的技巧。要研究实现此目标的最佳方法,需要以一个大型项目作为示例。为使项目

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值