来源:

http://my.oschina.net/alphajay/blog/52172

http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/1730726.html

  • 1. Perl自带的调试器(功能最全,就是最烦)

Perl调试器的用法: 
缺省的Perl调试器就是perl解释器本身,另外还有图形界面的调试器。因为我们在开发程序时一般都使用telnet访问服务器,所以这里主要介绍一下缺省的命令行调试器的用法。

用-d 命令行选项启动Perl解释器,例如 
perl -d test.pl 即进入Perl调试器的交互界面。

调试命令列表如下:(所有命令都在调试提示符下顶格输入,命令大小写有关) 
h:显示调试器的帮助信息。 
|h:以分页形式显示调试器的帮助信息。 
h h:显示一个压缩的帮助信息。 
h 调试命令:显示某个调试命令的帮助。 
p 表达式:显示变量或表达式的值,不显示复杂变量嵌入的结构和数据。 
x 表达式:显示变量或表达式的值,对较为复杂的变量,以一种可读形式显示嵌入的结构和数据。 
V 包名 变量名列表:显示指定包内的所有(或部分)变量的值。(缺省的包名为 main) 
X 变量名列表:显示当前包内所有(或部分)变量的值。 
注:V、X命令中的变量名列表以空格分隔且变量名前应去掉$、@或% 
T:程序的调用栈回退一级。 
s 表达式:单步执行,进入子函数。(step into)  如果提供一个表达式并且表达式中包括函数调用,则单步进入该函数内。 
n 表达式:单步执行,越过子函数。(step over) 如果提供一个表达式,则只是表示执行本表达式。
c 行号/函数名:执行到某一行或某一个函数停住。 行号/函数名如果没有,则表示继续执行。
l:显示未执行的一窗(一屏)文件内容。 
l min-max:显示第min到第max行的文件内容。 
l 行号:显示指定行的内容。 
l 函数名:显示指定函数的一窗(一屏)文件内容。 
w 行号:显示某行周围一窗(一屏)文件内容。 
f 文件名:切换到另一个文件。 
/模式:在当前文件中向前(文件尾)查找匹配的字符串。 
?模式:在当前文件中向后(文件头)查找匹配的字符串。 
L:显示所有断点和附加操作。 
S 模式:显示匹配(或不匹配,在模式前加!)的函数名。 
t:切换跟踪模式。 
t 表达式:跟踪执行表达式过程。 
b 行号 条件:在某一行设置一个断点,当程序执行到该行并且条件满足时,产生中断。 条件可省,表示一直满足。
b 函数名 条件:在某函数上设置一个断点,当程序执行到该函数并且条件满足时,产生中断。 条件可省,表示一直满足。
b load 文件名:在某个文件的第一个可执行语句上设置一个断点。 
d 行号:删除某一行的断点。 
D:删除所有断点。 
a 行号 命令:给程序的某一行加一个附加操作。在执行该行语句前先执行附加的操作。 
A:删除所有已安装的附加操作。

w:监视变量的变化,当值被修改的时候,程序停下。示例见下

W 表达式:增加一个监视项。 
W:删除所有监视项。 
O 选项名?:查询调试器可选项的值。 
O 选项名=选项值:设置调试器可选项的值。 
lt Perl语句:设置一个操作显示调试提示符前执行的操作。 
ltlt Perl语句:增加一个显示调试提示符前执行的操作。 
gt Perl语句:设置一个离开调试提示符(转入运行态)时执行的操作。 
gtgt Perl语句:增加一个离开调试提示符(转入运行态)时执行的操作。 
{ 调试命令:设置一个操作显示调试提示符前执行的操作。 
{{ 调试命令:设置一个操作显示调试提示符前执行的操作。 
注:上述Perl语句和调试命令均可输入多行,行尾以/转义。 
!number:重新执行以前第number次执行的调试命令。 
!-number:重新执行现在以前number次执行的调试命令。 
!模式:重新执行以前执行过的与模式匹配的调试命令。 
!!命令:不退出调试器执行一个shell命令。 
H-number:显示以前执行的number条调试命令。如果省略number,则显示所有执行过的 
调试命令。 
R:重新启动正在调试的程序。 
q或^D:退出调试器。 
|调试命令:将调试命令的输出分页显示。 
||调试命令:类似|调试命令,适于有大量输出的调试命令,例如:|V main。 
= 别名 值:给某个调试命令一个别名,例如:= quit q。

source 文件:执行文件中的perl调试命令

所有未识别的命令:当作插入的一条Perl语句执行。(使用eval) 
Perl调试器的功能还有很多,可以设置很多选项来定制调试器的环境,它本身也是用Perl开发的,并且Perl发布中还有接口让你能开发其它的Perl调试器。

如果要用Perl开发大的项目,有必要详细了解这些细节。使用调试器和设置调试器选项的例子请参考Perl发布中关于perldebug的文档。

perl -d filename

这句是进入perl的调试命令

然后屏幕上会出现如下字样:

Enter h or `h h' for help, or `man perldebug' for more help.

main::(filename:linenumber)

linenumber: content;

DB<1>

filename即所调试的文件名,linenumber显示的是当前调试语句的行号,content也即当前调试的语句,DB<1>后跟着黑色小方块的光标 <>中的1表示准备执行第几条调试命令

1、此时可以输入n,相当于Visual Studio中的F10,进入下一句的调试

2、如果想直接运行到第N行语句,可以在第N行处设置一个断点:b N (将N替换为需要设置断点的行

   号),回车后断点设置成功,可以输入L来查看所设置的所有断点情况,不想查看也可以直接输入c

   回车后就直接运行到设置断点的语句处了

3、想要删除断点可以用 B N (将N替换为需要设置断点的行号),回车后所在行处的断点即被删除,

   也可以通过B *来删除所有的断点

4、想要查看变量的值,通过print 变量名 就可以查看了

5、也可以通过给变量赋值来直接改变调试中脚本里的变量的值,比如直接输入:$debug = 0,这样

   $debug的值就被赋为0了

6、退出调试,只要输入q即可

来源:http://www.cnblogs.com/itech/p/5284739.html

1. 进入debug模式
# perl -d ./perl_debugger.pl
it prompts,
DB<1>
 
2. 查看从第10行开始的代码。 查看函数get_pattern的代码
DB<1> l 10
10: my $pattern;
DB<2> l get_pattern
11 {
12:    my $pattern;
13:    print “Enter search string: “;
14:    chomp ($pattern = );
15:    return $pattern;
16 }
 
3. 在函数find_files上设置断点
DB<3> b find_files
 
4. 在指定的44行设置断点
DB<4> b 44
 
5. 查看所有的断点
DB<5> L
./perl_debugger.pl:
22:    my $pattern = shift;
break if (1)
44:    print join “\n”,@list;
break if (1)
 
6. 单步调试,s 进入调用函数,n直接下一语句不进入调用函数
DB<5> s
main::(./perl_debugger.pl:39):    $pattern = get_pattern();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):  前部分main::get_pattern表示当前执行到package名(默认包名)为main下的get_pattern函数
12:    my $pattern;                                   表示接下去执行哪行code
Option s and n does step by step execution of each statements. Option s steps into the subroutine. Option n executes the subroutine in a single step (stepping over it).
The s option does stepping into the subroutine but while n option which would execute the subroutine(stepping over it).
 
7. 继续直到下一个断点
DB<5> c
Enter search string: perl
main::find_files(./perl_debugger.pl:22):
22:    my $pattern = shift;
 
8. 继续直到指定的行
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36:    return @list;
 
9. 打印变量的值
DB<6> p $pattern
perl
DB<7> c
main::(./perl_debugger.pl:44):    print join “\n”,@list;
DB<7> c
./perl_debugger.pl
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.
After the last continue operation, the output gets printed on the stdout as “./perl_debugger.pl” since it matches the pattern “perl”.
 
10. 从文件获得debug的命令和断点信息
Perl debugger can get the debug command from the file and execute it. For example, create the file called “debug_cmds” with the perl debug commands as,
c
p $pattern
q
Note that R is used to restart the operation(no need quit and start debugger again).
DB<7> R
DB<7> source debug_cmds
>> c
Enter search string: perl
./perl_debugger.pl
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.
>> p $pattern
perl
>> q
 
 
perl debug的高级用法
对调用的module中的函数设置断点:
b foo::bar::test::subname
 
可以设置永久的断点,在需要设置断点的行,加入:
$DB::single =1;
 
设置断点到调用的文件中的函数或行:
b line_number
b line_number file_path_name b function_name
b function_name file_path_name f file_path_name
b file_path_name:function_name
监视变量的变化,当值被修改的时候,程序停下:
w $varialename

具体帮助参见:

http://docs.activestate.com/activeperl/5.8/lib/pods/perldebug.html

  • 2. Komodo IDE(非常不错,就是不免费,但是有破解)

这是一个由ActiveState发布的针对动态语言的跨平台的集成开发环境。

所谓跨平台,其支持所谓Mac,Linux,Windows;

所谓集成开发环境,其支持代码编辑与调试

所谓动态语言,其除了支持perl,还支持狂多其他动态语言,如python,TCL, Ruby,PHP,  Google Go, PHTML/CSS and JavaScript.等等。

 [Tools]-[Add-ons]那边可以下到Emmet(formerly Zen Coding) (是一个toolkit,能够提高HTML&CSS的编码速度)

熟悉Visual Studio的同学可能会觉得很面熟。

详细说明可以参考其官方网站:https://www.activestate.com/komodo/

下载地址是:https://www.activestate.com/activeperl_pro_studio/downloads/

这的确是一个非常强大的工具,但是295$的价钱实在拒人于千里。21天的试用期到了,你的脚本还没完成,怎么办?

一般来说,每一个成功的商业软件背后,都会有一个好用(至少是可用)的免费软件。对于调试perl,我们至少还是另外一个选择:

官网:http://komodoide.com/
Komodo supports all your major languages, including Python, PHP, Go, Perl, Tcl, Ruby, NodeJS, HTML, CSS, JavaScript and more.
Komodo IDE收费的(能调试perl),Komodo Edit是免费的(不能调试perl)。

Komodo Edit是开源免费的高级文本编辑器,基于Mozilla XUL开发,完美跨平台,支持Windows,Linux,Mac,为Linux提供有通用二进制版本,解压即用.
Komodo占用的内存至少比Java based IDE少1倍,速度也更快,界面也更美观,对输入法兼容良好.
比如Komodo Edit在PHP文件里支持PHP/HTML/CSS/JS(jQuery等库)智能提示,支持语法错误提示,通过使用第三方扩展NST实现函数变量列表.
无论你是PHP/Python/Ruby开发者,Komodo Edit都值得一试.Komodo还提供有21天试用的商业付费的Komodo IDE,不妨一试.

free 21-day trial.

ACTIVEPERL PRO STUDIO: KOMODO, PDK

If you're looking for an IDE and want to use Perl Dev Kit (PDK), then ActivePerl Pro Studio is the right product for you. You get licenses for PDK and Komodo IDE

不过我有9.0的破解版,很好用!

  • 3. Notepad++ & ptkdb(不错,免费)

N++是个Windows下比较好用也比较有名的编辑器了,这里不再赘述,不熟悉的同学可以参考这里Notepad++比Ultraedit强(除了没有列出选中列表功能外)

当然,您要喜欢Komodo IDE的风格,它们提供了一个免费的Komodo Edit.

编辑器有了,调试器的任务就由ptkdb承担了:

ptkdb is a free/open source debugger for Perl with graphical user interface (GUI) based on Perk/Tk. 
ptkdb is able to run on almost any operating system.

免费,跨平台,有GUI,应该是可以满足我们的要求了。

  <

当然,其界面美观度和可操控性都没有Komodo IDE来的好,但是知足吧,有这么一个免费的工具用,已经很不错了。

下面介绍一下如何配打造这套"土IDE"

  1. 安装perl 
    对于windows下的用户,可以从activestate网站下载最新的perl安装包:https://www.activestate.com/activeperl/,注意安装的时候路径名不要太长,也不能有空格。
  2. 安装tk 
    tk是一个图形界面库,是由tcl引到perl中来的,ptkdb依赖于此GUI库显示界面。可以直接在cmd窗口: 
    ppm install tk
  3. 安装ptkdb 
    安装命令为: 
    ppm install devel::ptkdb

    如果用此命令安装失败的话,我们需要手动下载并将模块解压到:C:\Perl\Lib\Devel,当然,请把C:\Perl替换为你的安装路径。

  4. 与Notepad++的集成 
    至此,如果你想调试某个script的话,需要: 
    perl -d:ptkdb test.pl

    但既然我们在Notepad++中开发脚本,而Notepad++提供了与外部工具集成的机制,我们就可以非常方便的执行一个菜单命令来调试当前的脚本: 

    输入命令:

    Perl.exe -d:ptkdb "$(FULL_CURRENT_PATH)"

    然后save为一个run菜单命令,一切就ok了。

突然间有自己写个perl IDE的冲动~~~

如果是调试CGI,可能要本地运行一个X Windows服务器。

关于调试CGI,参见《CGI编程-使用Perl》 P420

  • 4. Ecplise 插件 EPIC (不错,免费。EPIC 调试器还可用于调试 Web(Perl CGI) 及远程调试 Perl 脚本(Perl Remote)

参见:

Eclipse+EPIC+PadWalker  http://www.cnblogs.com/spriteflk/p/5726671.html

4.1利用 Ecplise 插件 EPIC 调试 Perl 程序

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-epic/

这篇文章将详细介绍 EPIC 组件的安装,EPIC 编辑环境,调试运行环境,着重介绍如何使用 EPIC 来快速、简便、准确地调试 Perl 语言程序,包括对于 Perl 程序的单步执行,断点用法,局部、全局变量实时监控,子函数执行监控,错误以及警告信息实时显示等等内容。利用 EPIC 强大编辑以及调试功能,可以将 Perl 语言适合花短时间完成程序的特点发挥地淋漓尽致,为 tester 的自动化测试脚本提供更加人性化的设计、调试环境。

引言

Perl 语言是众所周知的一种编程语言,被广泛地用于日常生活的方方面面,它从最早的文本处理语言开始,已经发展成为一种非常复杂得,通用得编程语言。因为 Perl 几乎可以在任何地方运行,所以 Perl 可以说是当今最具有移植性得编程环境。Perl 擅长写那些需要在短时间内完成的程序,对于那些需要数十个程序员,花费数年的程序,Perl 也能很好地胜任,当然,更多的情况是你将写那些从开始构思到实际测试代码只需几十分钟的程序,Perl 被设计为:90% 处理文本,10% 针对其它情况。Perl 语言的这一系列特点,为自动化测试脚本的实现提供了无与伦比编程环境,可以说 perl 语言是自动化测试脚本的‘温床’。作为一名 tester,利用 perl 语言编写自动化测试脚本是一件酣畅淋漓得快事,但是对于编写好的 perl 程序脚本,目前有个问题摆在我们面前,那就是 Perl 语言程序的调试实在是一个令人崩溃的过程,许多 Perl 程序的语法检查以及运行中间结果都需要依靠若干没有实际用途的打印语句来实现,基于这一特点,Perl 程序调试又被世人戏谑为‘死后验尸式调试’。面对 Perl 语言的这一问题,基于 Eclipse 平台的插件 EPIC 诞生了,作为开源软件 Perl 语言的 IDE( 包括编辑器和调试器 )。可以应用于 windows, Linux 以及 Mac 平台。无论是 CGI 脚本还是复杂地拥有数百个模块的 perl 程序项目,它丰富的功能都可以为您提供快捷,便利的实时调试环境。

这篇文章将详细介绍 EPIC 组件的安装,EPIC 编辑环境,调试运行环境,着重介绍如何使用 EPIC 来快速,简便,准确地调试 Perl 语言程序,包括对于 Perl 程序的单步执行,断点用法,局部、全局变量实时监控,子函数执行监控,错误以及警告信息实时显示等等内容。利用 EPIC 强大编辑以及调试功能,可以将 Perl 语言适合花短时间完成程序的特点发挥的淋漓尽致。为 tester 的自动化测试脚本提供更加人性化的设计环境。

 

回页首

EPIC 安装功略

安装前准备

安装之前需要准备几个重要的组件:

  1. Perl 语言编译器

    版本要求是 5.8.X 或是 5.6.X,大多数 UNIX/LINUX 安装包都包括了 Perl 语言编译器的选装包,对于 Windows 平台,可以去指定网站下载相应的安装包 www.activestate.com

  2. Eclipse

    在安装 EPIC 插件之前,选择一个最新版本 Eclipse 进行安装是必不可少的步骤,

    对于 Eclipse 的版本最低要求是 version 3.1,可以从 [http://www.eclipse.org] 下

    载 Eclipse 安装包。

    由于 Eclipse 安装包不包括 Java Runtime Environment(JRE),为此,我们还需要安装

    Java 1.4.1 或是更高版本的 Java。

  3. PadWalker(全局变量跟踪器)

    这个模块不是必须要装的,它的功能就是在 Debug Perl 程序的过程中,监视全局变量的值。怎么样?不能实时监视全局变量的值是任何一个程序员无法忍受的‘减配’吧,为了发挥 EPIC 比较完整调试功能,千万不要拉下这个模块。可以从 CPAN (PadWalker 0.10) 下载这个包,如果是在 window 平台,可以从 EPIC homepage 下载该模块。

安装 EPIC

使用 Eclipse 软件的 Eclipse Update Manager 功能去安装 EPIC。

打开 Eclipse, 进入菜单 Help->Software and Updates ->Find and Install...

如图 1 所示:

图 1. EPIC 下载及安装

选择“Search for new features to install” 选择 Next,

选择“Add Update Site... “,在弹出一个对话框中填写用户名和有效的 URL: http://e-p-i-c.sf.net/updates.,

如图 2 所示:

图 2. EPIC 下载网址

继续选择’ Next ’ , 直到完成。

安装 PadWalker(全局变量跟踪器)

  1. 下载适用于 Perl 5 .8.1 的 PadWalker 压缩软件包。
  2. 解压以后把文件拷贝到 perl 安装目录,比如 C:\Perl。
 

回页首

EPIC 编辑环境

EPIC 提供了多功能的编辑器,可以方便用户编写 perl 程序,提供了语法高亮显示、语法即时检测、错误以及警告信息注释、Perldoc 查询、变量检查、模块检查、源码折叠等一系列功能,对于编写测试自动化脚本的工程师,书写脚本是整个测试工作的很麻烦的一部分,我们都希望有这个一个利器,能方便快捷地处理这些工作,很幸运,EPIC 帮我们实现了这一切。如图 3 所示:

图 3. EPIC 编辑对话框

 

回页首

配置 Perl 程序运行调试环境

创建工程并输入文件

  1. 创建一个新工程(也可以在一个已存在的工程中加入你自己的工程)
  2. 在菜单‘ File ’中选择‘ Import ’,当然,也可以新建文件,并用 EPIC 编辑器来编写相关 Perl 程序,对于 EPIC 编辑器,在上文有相关介绍。
  3. 从弹出的列表中选择‘ File System ’

如图 4 所示:

图 4. 选择将要导入的文件系统

4. 选择‘ Next ’

5. 在弹出的面板中,单击‘ Browse ’选择要输入文件所在的文件夹,输入文件将会出现在面板上,在此,单击文件前面的复选框,就可以选择要输入到工程中去的文件。如图 5 所示:

图 5. 导入文件

6 .单击‘ Finish ’完成当前工作。

配置 Perl 编译器运行环境

在 Eclipse 环境中,调用 Perl 语言编译器来运行调试工程文件,就必须做相应配置,单击菜单‘ project ’,选择‘ Properties ’,将上一步输入工程的文件的绝对路径填写到弹出面板右侧编辑区。如图 6 所示:

图 6.Include 文件路径

配置调试对话框

首先,对于选中的工程文件,在 EPIC 主界面上选择菜单‘ Run ‘,并在弹出下拉框中选择’ Open Debug Dialog ’,再修改如下配置(选择工程以及要调试的文件):

如图 7 所示:

图 7. 调试对话框配置 1

对于 Perl 程序的运行调试都需要添加 Program Argument,我们可以为新建项目增加 Argument,EPIC 插件也提供了这方面的接口,打开 Debug 对话框,并在项目中 argv items in “(x)= Arguments” 添加相应的 Argument。如图 8 所示:

图 8. 调试对话框配置 2

 

回页首

EPIC 调试运行过程

任何程序的调试与运行都是密不可分的,从程序工程师的角度来看,一个程序从编写完毕到最后成功完成,都是一个运行、修改、调试、再运行、再修改、再调试。。。

的过程。EPIC 提供了完整的调试运行环境。

EPIC 运行程序

对于选中的工程文件,在 EPIC 主界面上选择菜单‘ Run ‘,并在弹出下拉框中选择’ Run ’,如图 9 所示:红线框住的区域表示程序的整个运行过程和结果都可以看到。

图 9. EPIC 运行程序界面

EPIC 调试程序(俗称‘ Debug ’程序)

相比较运行程序而言,这一过程显得复杂得多,这也是这篇文件的精髓所在,前面都是为这一步在做必要地铺垫。对于程序员而言,调试程序是不可避免的,通常将要调试的线程挂起,然后利用单步执行方式来实现对整个程序的一行一行代码地执行,同时,观察每一步运行的结果,以及掌握运行过程中变量的变化情况。

EPIC 提供了多种调试操作功能以方便用户实现在编程中的切实需求,包括单步执行、跳入子函数、跳出子函数、断点设置、断点取消、直接执行语句段直至断点位置等等。

  1. Step Over– 单步执行函数、循环 loop、或执行其他普通语句。正待执行的代码行在 EPIC 编辑器中会被高亮显示出来,此时,线程处于挂起状态,在 Debug 视图工具条中按下这个功能图标 ()(相应的快捷键是‘ F6 ’)后,该行语句将被执行,完毕后,将自动跳转到下一行待执行语句,并使其呈高亮显示状态,该线程继续挂起等待下一步指令。
  2. Step Into– 可以执行进入函数、循环 loop、或执行其他普通语句。在 Debug 视图工具条中按下这个功能图标 ()(相应的快捷键是‘ F5 ’),该功能类同上述‘ Step Over ’,不同之处在与:如果该语句中含有子函数,循环等结构,‘ Step Over ’是直接后台执行完这些子函数或是循环,并返回结果。但是‘ Step Into ’却会按执行栈的顺序执行方式,依次跳入子函数或循环提供单步执行的功能。
  3. Step Return– 这一功能是针对执行过程已经进入子函数后,可以从当前代码行开始直接后台执行完该子函数剩余代码并返回,不用再单步执行该子函数。在 Debug 视图工具条中按下这个功能图标 ()(相应的快捷键是‘ F7 ’)。

4. 如果要直接后台执行到最近的下一个程序断点位置可以使用快捷键‘ F8 ‘来实现这一功能。

在主界面中选择菜单‘ Run ‘ -> ’ Debug ’ , 就进入程序调试状态了,我们可以选择调试操作方

式,包括单步执行、跳到最近的下一个断点再执行,跳入子函数等等,针对这些操作过程中,

对于工程师来说,始终关注的都是整个程序的运转情况以及掌握每一步执行操作完成后相关变

量的变化情况,为此,我们有必要介绍一些视图,利用这些视图,我们可以更好的掌握程序的

调试状况,以利于下一步操作。

首先,进入调试界面接口,可以在主界面中选择:Window-> Show View ->Debug,在弹出来的

视图里,可以管理在工作区的正在被调试或是运行程序,它显示了一个工程框架、工作过程中

的程序运行状况等等。如图 10 所示:

图 10. EPIC 调试窗口

变量视图能够显示程序在运行过程中的变量的值以及其实时变化情况,这一功能对于调试工作来说是尤为重要的,变量是程序的‘血液‘,程序代码就是通过变量来连接的,掌握变量的情况,就是掌握整个程序的运行状况。

在变量视图里面,可以看到变量栈的框架结构,它显示变量的原始状态,包括结构体变量、哈希变量、list 变量或是对象等等。

全局变量(包括 Perl 内部变量)都有特定图标 , 标注,本地变量有特定图标 (如前文

介绍,本地变量必须是安装了 PadWalker 模块才能看见)。

如图 11 所示:

图 11. EPIC 调试窗口

断点视图可以显示该程序文件中所有的断点、它们的状态以及位置。在这个视图里,可以通过选择一个或断点,并激活对应断点的程序文本框,来设定、使之无效或是取消断点。

如图 12 所示:

图 12. EPIC 调试跟踪

 

回页首

总结

综上所述,我们已经看到了一个集编辑、编译、调试 Perl 程序为一体的图形化的工具,它解决了若干年来一直困扰着测试工作者的对于 Perl 语言编写自动化脚本‘调试难’的问题。它简洁明了、功能强大的编辑环境也给 Perl 语言编程者带来了世外桃源般得享受。最重要的是获取这一切,您都采取的是免费的方式,因为所有的组件都是开源的,这是一款非常值得推荐的软件工具。

4.2如何用Eclipse调试Perl应用程序

来源:http://www.shangxueba.com/jingyan/88423.html

开始之前

本教程将介绍 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)
',
       $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 登场的时候了,下面将介绍在项目中遍历的方法 —— 对于代码执行和调试来说,这是一项至关重要的技巧。要研究实现此目标的最佳方法,需要以一个大型项目作为示例。为使项目进入 Eclipse,您将使用导入系统将文件添加到新项目中。

运行导入

要了解如何调试应用程序,一个好方法就是首先将已开发出的应用程序导入您的系统中。这将为您奠定良好的基础,并使您有机会了解如何在大型项目中遍历 —— 在使用调试器接口时,这是一项必备的技巧。

按以下步骤操作即可导入一组现有文件:

若必要,创建一个新项目(若想将文件添加到您自己的项目中,也可使用现有项目)。

在 File 菜单中选择 Import。

从可用导入源清单中选择 File system,参见图 1。

图 1. 选择导入源

单击 Next。

在下一面板中单击 Browse,选择导入操作的源文件夹。文件夹将显示在左侧的面板中。源文件夹中的其他文件夹则以树型结构显示在此列表中。选中文件夹中的文件则显示在右侧的面板中。

单击所显示文件夹旁边的复选框。也可按照同样的机制选择多个独立文件和文件夹。

您可选择至此完成,但有时,您可能不想导入此文件夹中的其他文件。手动选择文件非常复杂,您可利用过滤器自动选择文件导入:

若想仅选择 Perl 文件(通常是以 .pl —— 即脚本、.pm —— 即模块结尾的那些文件),请单击 Filter Types 按钮。

您将看到一个可能文件类型的清单提示(参见图 2)。所有的 Perl 文件类型旁都带有骆驼图标。单击您希望导入的文件类型旁的复选框。

图 2. 选择要导入的文件类型

如果您为 Perl 文件使用了非标准扩展名,可通过 Other Extensions 文本框添加您的扩展名。

确定最终的扩展名清单后,单击 OK。

最好检查一下已选择了哪个文件。从源文件夹中选择的各文件旁应已有复选框。在图 3 中可看到过滤后文件的示例。

图 3. 查看要导入的文件/文件夹

如果确认已选好的导入文件/文件夹无误,即可单击 Into Folder 文本框旁的 Browse 按钮。系统将要求您选择导入文件的目标项目文件夹。

单击 Finish。

项目已成功导入,下面将介绍如何在项目中遍历。

遍历大型项目

遍历项目的方法有两种,具体选择哪种取决于您的位置。您可利用 Navigator 视图浏览整个项目。此时可看到一个或多个打开项目的独立文件夹和其中的文件。图 4 给出了一个示例。

图 4. Navigator 视图

选中要在 Editor 中查看的特定文件后,Outline 视图会显示已导入文件中的模块以及文件内定义的所有子例程。两者结合在一起,使文件布局和功能更易于理解。要跳过特定子例程,可在 Outline 视图内双击其名称。图 5 给出了一个 Outline 视图窗口的示例。

图 5. Outline 视图

EPIC 的 AutoLoader 限制

值得注意的是,某些流行的 Perl 结构和技术在 EPIC/Eclipse 中无法使用。AutoLoader 系统中就存在着一个这样的限制,该系统提供了一种灵活、高效的途径,可将模块分割成较小的文件,在执行期间自动载入。

AutoLoader 系统的工作方式是,将除存根自动加载器 (stub auto-loader) 以外的所有代码置入文件的文本部分中。这一文本部分通常用于存储脚本数据(而非使用外部文件来存储),因此假设它将会被忽略是安全的。但遗憾的是,这也意味着 Eclipse 会完全忽略此代码。

代码折叠

可读性使代码易于理解,对调试代码大有裨益。EPIC 插件提供的工具首先使代码具有良好的格式,从而更具可读性,并且更容易隐藏不再需要或不再希望看到的子例程及组件。

代码折叠 使您能够隐藏给定子例程的定义。除了子例程声明存根依然显示外,子例程代码定义的其他部分都可隐藏。

如果在编辑器窗口中查看 RSS Feeder 脚本,将看到各子例程左侧列中有一个短线标记,如图 6 所示。

图 6. 折叠前代码中的子例程

若单击 parse_items_to_text() 旁的短线标记,整个子例程定义将隐藏起来。关于折叠后的子例程定义示例,请参加图 7。

图 7. 折叠后的子例程

折叠后原短线标记将变为加号标记(强调代码已折叠)。单击加号标记将立即展开代码,重新显示出定义。

运行 Perl 应用程序

现在,您应该对如何利用 EPIC 简便地遍历项目有了很好的理解。但在开始调试应用程序之前,应首先了解一下如何运行应用程序。要运行应用程序,需要创建一个新的运行配置。

RSS Feeder 应用程序

RSS Feeder 应用程序的基础知识已在 “Build Perl applications with Eclipse” 教程中介绍过。为方便起见,清单 3 中给出了本教程后面将用到的脚本。

清单 3. RSS Feeder 脚本

use strict;
use warnings;
use XML::RSS;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $feeds = { "MCslp" => 'http://www.mcslp.com/wp-rss2.php' };
foreach my $feed ( sort keys %{$feeds} )
{
   my ($rss) = parse_rss_fromurl( $feeds, $ua, $feed );
   parse_items_to_text($rss);
}

sub parse_rss_fromurl 
{
   my $feeds  = shift;
   my $ua    = shift;
   my $feed   = shift;
   my $response = $ua->get( $feeds->{$feed} );
   my $rss;
   if ( $response->is_success )
   {
     $rss = XML::RSS->new();
     $rss->parse( $response->{_content} );
   }
   return ($rss);
}

sub parse_items_to_text 
{
   my ($feed) = @_;
   foreach my $i ( @{ $feed->{items} } )
   {
     next unless defined($i);
     my $len = length( $i->{"title"} );
     print($i->{"title"},
        "\n",
        ( '=' x $len ),
        "\n",
        $i->{"description"},
        "\n\n",
        $i->{"link"},
        "\n\n" );
   }
}

这段脚本由一个处理散列的基本循环构成,首先下载 RSS 提要源(使用 LWP),然后解析源(使用 XML::RSS)。所得到的对象将用于输出 RSS 提要项的简单文本表示。

为执行而配置应用程序

在介绍调试的细节之前,您首先应了解运行当前在 Eclipse 内开发的应用程序的基础知识。本节将延用介绍在 Eclipse 中开发 Perl 应用程序的教程中所生成的 RSS Feeder 应用程序。我已利用本教程前面所介绍的技术将此应用程序的文件导入系统。

请按以下步骤配置欲执行的项目中的脚本:

从 Run 菜单中选择 Run。您将看到一个如图 8 所示的对话框:

图 8. 设置默认 Run 配置

选择 Perl Local 项,并配置在调试或运行一个本地 Perl 脚本(非远程或 CGI)时所使用的透视图。运行脚本时,您的透视图将自动切换为此处所配置的透视图。

确保在此对话框左侧的配置列表中选中了 Perl Local,且选择了 New。您将看到用于创建新 Run 配置的对话框,如图 9 所示。

图 9. 添加新 Run 配置

配置您想执行的项目和脚本的名称。请注意,您也可以向脚本中添加任何命令行选项。切记添加配置名称,务必注意此配置特定于此项目中的此脚本。

您也可以通过 Conmon 面板设置特定选项,例如将输出发送到哪里、是否将此添加到 Run 菜单的可用脚本中以执行、是否启用控制台等(参见图 10)。

图 10. Common 配置面板

单击 Apply,再单击 Close 保存配置。

激活配置后,即可随时运行您的脚本。

运行您的应用程序

既然已经获得了活动的 Run 配置,您就可以执行您的脚本,并测定它是否按照您期待的方式工作。

第一次运行您所配置的脚本时,需要手动选择配置。但这样的手动选择仅需一次,此后可在 Run 菜单中直接将其作为 “历史” 项目选择并再次运行。您还可编辑 Run 配置选项,明确地将该脚本添加到 Run 菜单中。

初次运行您的配置时,请按以下步骤进行操作:

从 Run 菜单中选择 Run。

从左侧的配置列表中选择配置。

选择 Run。

您的脚本将被执行,且其输出被发送到 Eclipse Console。

如果您未在 Eclipse 中打开 Console 视图,可在 Window 菜单中选择 Console 视图打开它。

图 11 展示了此 RSS Feeder 脚本的部分输出示例。

图 11. RSS Feeder 脚本的控制台输出

您未必希望只是单纯地运行应用程序,而不通过某种方式监控或处理应用程序,下面我们将就此进行介绍。

与您的应用程序交互

对于基本的文本脚本或通过标准输入/输出实现大多数交互的应用程序来说,Eclipse 的 Console 视图足以应付。当然,通过此界面能实现的交互是有限的,您可能会希望至少要增加控制台视图的大小,使其更便于使用。

如果您创建了一个运行配置的 CGI,执行模型会略有不同。原因在于 EPIC 创建到脚本的临时 CGI 接口的方式,以及通过内置 Web 客户机或第三方客户机 —— 如 Internet Explorer、Safari 或 Firefox —— 提供 CGI 输出的方式。

在您调试 —— 而非单纯地执行 —— 应用程序时,CGI 脚本接口充分的交互性更有意义。调试通常需要较多的交互,因此下面我们将介绍调试过程中脚本执行的细节。

调试标准应用程序

既然您已经理解了如何利用 EPIC 遍历项目并运行应用程序,那么下面将开始介绍标准应用程序的调试。

需要您完成的工作仅仅是将标准 Run 环境的配置更改为调试配置。Eclipse 随后会提供一个调试透视图,该透视图支持标准调试工具(如断点),并且能够使您在执行过程中查看变量。

为调试而配置应用程序

请按以下步骤配置项目中要调试的脚本:

从 Run 菜单中选择 Debug。您将看到如图 12 所示的对话框。

图 12. 调试配置

选择 Perl Local 项,并配置在调试本地 Perl 脚本(非远程或 CGI)时所使用的透视图。运行脚本时,您的视图将自动切换为此处所配置的透视图。由于您是为调试而进行配置,所以请选择 Eclipse Debug 透视图。

您可以选择创建新配置,也可使用现有配置。要创建新配置,请在本对话框左侧的配置列表中选择 Perl Local,然后单击 NewY。随后将看到用于创建新 Debug 配置的对话框,如图 13 所示。

图 13. 添加新 Debug 配置

配置要执行的项目和脚本的名称,请注意,您也可以向脚本中添加任何命令行选项。切记添加配置名称,务必注意此配置特定于此项目中的此脚本。

单击 Apply,再单击 Close 保存配置。

激活配置后,即可随时调试您的脚本。单击 Debug 可启动调试过程。

Eclipse 调试界面

Eclipse 的调试透视图为 Eclipse 中的绝大多数调试系统共享和使用,包括在调试 C/C++ 和 Java 应用程序时。图 14 展示了调试透视图的一个示例。

图 14. 调试透视图

调试透视图由多个默认视图构成,包括:

Debug 视图本视图展示了正在运行的脚本,包括单独脚本中的多个线程。图 15 给出了此视图的一个特写。此处该视图中显示的是正在运行的脚本 (Main Thread) 和 Perl Debugger 线程(用作运行脚本的接口)。请注意图中还显示了脚本中执行暂停时所在的行。如果您从视图中选择此项,则源代码中的相应行将显示出来。Variables 视图本视图可用于显示变量值,其输出类似与本教程前面介绍传统调试方法时提到的 Dumper() 函数所产生的输出。后面我们将更详细地介绍如何配置要查看的变量。Breakpoints 视图本视图显示了为所调试的应用程序配置的断点。后面我们将更详细地介绍配置断点的相关内容。

其他视图您应该已比较熟悉,如编辑器视图、项目大纲视图和控制台视图等。

开始调试应用程序后,您会希望开始单步执行代码行,并监控输出。调试器自动在可执行代码的第一行处停止(导入所有模块后)。

单步执行所调试的应用程序

单步执行所调试的应用程序使您能够逐行、逐函数调用地监控脚本的执行。通过单步执行,您可以通过函数调用、测试语句等跟踪执行,还可在代码执行期间监控变量值。

Eclipse 支持 5 种 step 模式,但在大多数情况下,EPCI 插件仅支持前三种。可利用工具栏上的 Step 按钮(工具栏面板右侧的后 5 个按钮):

Step Into —— 进入函数、循环或其他语句。若函数可用,调试器将显示源代码,并允许您单步执行源代码。

Step Over —— 跳过一条语句,转向代码中的下一条语句。

Step return —— 若您已进入函数,则执行函数中的全部代码,包括其返回语句。

您可以单击 “Play” 按钮(正是您的 VCR play 按钮)重新开始执行,直到预先配置好的断点或脚本末 —— 以先满足的条件为准 —— 处停止,利用类似于 VCR 的 Pause 按钮暂停,使用 Stop 按钮完全停止执行。

如果您停止了执行,想在同一脚本上重新启动调试过程,可右击过程,并在菜单中选择 Relaunch。

添加/删除断点

有时您希望在脚本执行过程中暂停或停止执行,断点正是代码中执行暂停或停止时所在的行。可想而知,断点的功能正是在该点中断执行。

为配置断点,请在源代码中要添加断点的行旁边的边框处右击。

您将看到一个提示菜单,允许您在代码此处添加断点。在设置断点时,您会发现启用行号是非常有用的(通过同一提示菜单即可实现)。

添加断点后,代码行旁会出现一个断点图标,如图 15 所示。断点图标显示在源代码第 6 行的旁边。

图 15. 带有断点的代码

您还可以使用 Breakpoints 视图访问已配置断点的列表(如图 16 所示),其中列出了项目中所有已配置断点的类型、文件和行号。

图 16. Breakpoints 视图

要删除断点,可在源代码相应行处再次右击并选择 Remove Breakpoint,也可从断点列表中选择要删除的断点,然后右击它,按同样方式删除。您还可以启用和禁用断点,若您在调试同一代码且想监控相同的位置,但不必同时进行监控,那么这一功能是很方便的。

监控变量

选中正在运行的线程后,当前范围内的全部变量将以列表形式显示在 Variables 视图中。图 17 给出了 Variables 视图的示例。

图 17. 调试器变量

对绝大多数调试器而言,仅在您明确将变量添加到要监控的变量列表后才能显示变量,EPIC 调试器与此不同,它会自动显示当前范围内的所有变量。如您所见,这里也显示了变量的全部细节信息,您可以使用树型界面来审查脚本中像嵌套数组和散列这样的复杂结构的值。请注意,本地变量带有一个包含 “L” 的图标,其他所有变量则使用标准变量图标。

在上一次执行后发生了变化的变量会以红色突出显示。这使得在单步执行应用程序时寻找所更改的变量变得轻而易举。

除在您的脚本中所定义的变量外(包括当前块的全局变量和局部变量),变量视图还会默认地显示脚本中间接使用的一些全局变量。例如,它会显示特殊 STDIN、STDOUT 和 STDERR 变量的值。

您还可选择显示内部 Perl 变量(例如 $$、%ENV 等)。单击 View 菜单,选择 Show Perl Internal Variables 即可。图 18 显示了一个启用了此功能的 Variable 视图。

图 18. 显示标准内部变量

切记 Variable 视图仅显示当前范围内的变量或全局变量。它不会显示当前范围内(函数、循环、块,甚至是模块或包)不可用的变量。

调试 Perl CGI 应用程序

至此,您已经了解了使用 EPIC 调试 Perl 应用程序的好处,那么对于 Per CGI 应用程序来说,情况又如何呢?由于 CGI 应用程序是由 Web 服务器执行的,通常通过 Web 浏览器输出其信息,因此调试起来非常困难,除非您使用本教程一开始提到的事后调试技术。但 EPIC 为此类问题提供了一种独特的解决方案。

配置 CGI 调试会话

要调试 Perl CGI 脚本,您需要具备一个正常工作的可用 Web 服务环境,如 Apache 或 IIS,且能够向 IIS 目录中写入信息。EPIC 调试 CGI 应用程序的方式就是作为 Web 服务器与客户机之间的代理。这使其能够控制和监控脚本的执行,即便从技术上来说,脚本是通过 Web 服务器存取的。

请按以下步骤配置 CGI 调试会话:

从 Run 菜单中选择 Debug,打开 Debug 配置窗口。

从可用配置类型列表中选择 Perl CGI 配置。

单击 New 创建新配置。

在 Configuration 面板中(如图 19 所示)选择要调试的项目。可以在 Web Server 面板中按扩展名选择 CGI 脚本。

图 19. Configuration 面板

在 Web Server 控制面板中(如图 20 所示)为已配置的 Web 服务器配置 HTML 和 CGI 目录。您需要将脚本复制到此目录中(可使用 Eclipse 的 Export 函数)。还需要配置在调试时要用到的 “启动” 文件的名称。此文件将在首次访问 Web 服务器时返回,其中应包含到脚本的链接,或使用脚本的表单。

图 20. Web Server 面板

若您需要设置自定义 CGI 环境变量,可使用 CGI Environment 面板来设置这些变量及其值。

在 Browser 面板中,选择您想用于调试脚本的浏览器。我发现内置浏览器往往是最佳选择。

单击 Apply。

单击 Debug 启动调试过程。

调试 Perl CGI 脚本

运行 Perl CGI 脚本后,即可执行在调试标准脚本时所执行的全部功能。您同样可以单步执行、监控变量、设置断点以中断执行。

在图 21 中可看到 Perl CGI 脚本形式的 RSS Feeder 应用程序的执行示例。

图 21. 调试 Perl CGI 脚本

了解了 Eclipse 作为脚本和实际 Web 服务器之间的代理工作的方法后,您就可以控制执行了。甚至可轻而易举地监视和控制脚本中 HTML 的个别输出。以这种方法调试 CGI 脚本时,超时期通常较长,某些浏览器在这种情况下会出现问题。因此我建议使用更能容纳 CGI 调试影响的内置 Web 浏览器。

调试正则表达式

调试正则表达式的艰难程度尽人皆知,调试工作中通常还要构建正则表达式,并根据不同的脚本测试其执行。通过使用交互式的正则表达式测试系统,您可以加快整个过程。EPIC 插件正是这样的一个系统。

如果您向 Eclipse 透视图中添加正则表达式视图(开发或调试时),就可以根据已知值输入和测试单独的正则表达式,而无需为此创建脚本。图 22 显示了工作中的 RegExp 视图。

图 22. 使用正则表达式视图

使用方法时,在顶端的文本框中输入正则表达式,在 Match 文本框中输入作为测试依据的文本。您还可添加选项,如忽略大小写、匹配多行字符串等,只需选中恰当的复选框即可。

若正则表达式正确,则您会看到一个绿色的指示标记。不正确的表达式则为红色,未经核对的表达式为黑色。

视图右侧的按钮用于执行以下操作(由左至右):

Stop execution停止正则表达式的执行。Step backward在有多个元素(例如,多个组)的正则表达式中,此按钮的作用是沿匹配元素向后移动。相应地突出显示匹配文本中匹配的元素。例如,在图 22 所示的正则表达式和匹配文本中,最先匹配的是数字,随后是名称。Step forwardStep forward 将向前遍历正则表达式中的匹配元素。Run在整个文本块上运行正则表达式。成功运行的块将以不同的颜色突出显示,如图 23 所示。

图 23. 运行整个正则表达式

在调试标准脚本时,正则表达式调试器/测试器视图也变为可用。您甚至可以设置一个特殊的正则表达式断点。

现在您应该已经学会了如何利用 EPIC 调试您的 Perl CGI 应用程序。

结束语

在本教程中,我们介绍了调试 Perl 脚本时可以使用的方法。从在传统 Perl 开发环境中所使用的方法开始。总体而言,其中包括两种方式,使用 print() 函数并监控输出或使用 Perl 所提供的调试器。这两种方法都有一些局限性。

利用 EPIC —— Eclipse 的 Perl 开发环境插件,您可以调试 Perl 脚本和 Perl CGI 应用程序。您希望一个调试器具备的一切功能都可以通过 EPIC 获得,包括单步处理、变量监控,以及设置断点并监控脚本的执行。您还可以通过 Eclipse/EPIC 调试 CGI 脚本,利用在 Eclipse 中运行脚本同时直接将脚本输出定位到 Web 浏览器(包括 Eclipse 所提供的内置 Web 浏览器)这样的方式即可。最后,我们还介绍了在脚本内调试正则表达式的方法 —— 特别地,可在开发过程中实现这样的调试。

通过本教程介绍的 EPIC 所提供的功能,以及 “Build Perl applications with Eclipse” 教程中所介绍的功能,您可以了解,该插件提供了一个完整的环境,可使您在 Eclipse 内开发和测试 Perl 应用程序。

4.3浅谈配置Eclipse支持Perl脚本开发

  来源:http://www.educity.cn/develop/1396821.html

   1 Installation

  EPIC(Eclipse Perl Integration)是一个基于Eclipse平台的开源Perl集成开发环境。其支持的功能有语法高亮、语法检查、代码提示、Perldoc支持、模版、Perl调试器和正则表达式插件等。

  在安装EPIC之前需要安装Eclipse3.1以上版本,此外还需要安装Perl解释器(Unix和Linux平台通常会缺省安装Perl,Windows平台上可以安装ActivePerl,下载地址)。

  可以通过Eclipse Update Manager来安装EPIC。选择菜单Help->Software and Updates->Find and Install,在弹出的Install/Update对话框中选择Search for new features to install然后单击下一步,在弹出的Install对话框中单击New Remote Site,在弹出的对话框中输入Name(例如EPIC)和URL()然后单击确定。接下来在Install对话框中选中刚才新建的Site,单击完成。按照向导的指示完成后续的过程,忽略途中提示的未经签名的警告。重启Eclipse后,EPIC应该已经安装完毕了。

  如果要暂时禁用或者卸载EPIC,选择菜单Help->Software and Updates->Manage Configuration,展开弹出对话框左侧的树控件,选中当前版本的EPIC并单击右键,在弹出菜单中选择禁用或者卸载。

  2 Setting Up Preferences

  选择菜单Window->Preferences,在弹出的Preferences对话框左侧的树控件中选择Perl EPIC以打开Perl EPIC General Preferences页。这个页中包含了Perl解释器的路径、解释器的类型以及其他选项等。

  关于解释器的类型,除了standard之外,还可以选择Cygwin。如果选择Cygwin,那么@INC数组的内容会有所变化。至于@INC数组,当使用use ModuleName来装载模块时,Perl会在@INC数组中列出的每一个目录中查找模块。因为use是在编译时装载模块,所以任何对@INC的修改都需要在编译时发生。可以通过BEGIN块在编译时向@INC中添加值,例如BEGIN { push @INC, ‘/path’ }。@INC通常包含(假设Perl安装在/perl):/perl/lib /perl/site/lib .。核心模块是安装在”perl/lib”目录中,非核心模块安装在”perl/site/lib”目录中,”.”这个目录表示当前的工作目录。在Eclipse中选中Perl工程,选择Project->Properties,在弹出的对话框中选择Perl Include Path,然后就可以向@INC中添加项目。如果没有指定绝对路径,那么这个路径是相对于工程目录的。可以使用标准的Eclipse变量,例如${project_loc}。

  关于调试器相关的设置有以下两个:

  Enable debugger console。这个选择只是在你希望调试EPIC自身的时候有用,在其它情况下不要使用。在调试的时候,一个特殊的控制台(单击Debug View中的perl –d项目以显示此控制台)会显示EPIC和后台的Perl调试器之间的通信内容。

  Suspend debugger at first statement。此项目缺省是选中的,选中它会导致调试器在脚本的开始处停止,而不论该处是否有断点。

  如果不安装PadWalker模块也是可以使用调试器的,但是在这种情况下local variables 不会被显示。可以从CPAN上下载PadWalker的最近版本并进行安装,例如使用Perl安装中附带的安装管理器(ActiveState附带的是Perl Package Manager)进行安装。

  EPIC在进行语法检查时如果发现语法错误,那么会显示错误或警告图标。如果右键单击该图标,并在弹出菜单中选择Explain Errors/Warnings,那么在Explain Errors/Warnings view中会显示具体的错误或警告信息。

  如果安装了ActivePerl,那么会同时安装Perldoc。通过Perldoc可以查找相关的帮助文档,例如在命令行上输入 Perldoc -f use可以查看use的用法。如果在程序中选择部分文本并单击右键,并在弹出菜单中选择Perldoc(如果没有任何选中,那么会弹出一个输入对话框),那么在Perldoc View中会显示查找到的帮助文档。

  在Content Assist Preference 页中可以指定代码提示的触发字符,通常不需要对其进行修改,只要取消选中Inspect Variables即可关闭此功能。需要注意的是:目前Content Assist支持使用箭头操作符的方法调用,例如:

  $smtp = Net::SMTP->new();  
  $smtp->[content assist]

  不支持间接对象的方法调用,例如:

  $smtp = new Net::SMTP;  
  $smtp->[no content assist]

  在Templates Preference 页中可以创建、编辑或者删除模版。例如在New Template对话框的Name文本框中输入for,在Pattern中输入for(${var} = 0; ${var} < ${max}; ${var}++) {}并单击确定就新建了一个新的模版。在编写程序时,输入for并按下Alt+/之后(可以通过Window->Preferences->General->Keys配置),之前定义的模版会被插入到代码中。按下TAB键可以切换模版中的用户自定义变量(例如${var}和${max})。

  在Task Tags Preference 页中可以指定一系列用来在注释中作为任务标记的关键字,缺省有TODO 和TASK;EPIC 使用 PerlTidy 来格式化源码,Source Formatter Preference页用来指定PerlTidy的命令行参数。

  3 Perl Project

  推荐以核心Perl发布的惯例形式来组织你的工程:

  将你自己的模块保存在工程的某个子目录中,例如在工程根目录下建立一个lib目录,用来保存所有*.pm文件。并将这个子目录添加到@INC中。

  将包名映射成子目录名,例如将Foo::Bar包中的代码保存在lib/Foo/Bar.pm文件中,并保证lib/Foo/Bar.pm中只包含Foo::Bar包中的代码。

  你自己的Perl脚本保存可以保存在工程中的任何目录里,例如工程根目录下的bin或者cgi-bin目录。
  在装载一个包时,不要使用require,而是使用use,例如use Foo::Bar。

  4 RegExp Plug-in

  RegExp插件是个调试正则表达式的小工具,其打开方式如下:选择菜单Window->Show View->Other,然后在弹出的Show View对话框中选择EPIC节点下的RegExp。

  如果在RegExp文本框中输入正则表达式,在Match text文本框中输入进行匹配的文本,并单击右侧的Validate RegExp按钮。如果表达式和文本匹配,那么会显示绿色图标;否则显示红色图标。如果表达式包含小括号,那么在Match text中与小括号部分匹配的文本会高亮显示。

  • 5. perl-express(免费。能调试。只能用于windows)

perl-express: http://perl-express.com/

不知道怎么样?感觉用的人不多呢。

  • 6. ActiveState Perl Debugger(免费。能调试。只能用于windows)

http://www.activestate.com/

也支持调试CGI,参见《CGI编程-使用Perl》 P421-422 (不过没怎么讲怎么调试)

可能现在没了,被Komodo代替了?

  • 7. Dzsoft perl editor

什么是ActivePerl?

ActivePerl是Perl语言的Windows版本,Perl是一种很自由而且功能很强大的编程语言,主要被用作 Web 编程、数据库处理、XML 处理以及系统管理,而且Perl 相当快捷实用。

什么是Dzsoft perl ?
Dzsoft perl editor是Perl/CGI 脚本编写、编辑和调试工具。它有着舒适而直观的用户界面,适合于初学者和高级程序员。它简单得有些奇怪,但是它真的是一款强大的工具。它有调试功能,一个舒适的带语法加亮的编辑器,一个语法检查功能可以找到你脚本里的错误,还有许多其他功能用来方便Perl的开发。

dzsoft可以和active perl关联,就可以在编辑器里直接调试程序了。

  • 8. Notepad++和print(最简单,就是搓)
  • 9. Sublime Text 3 & 插件(免费。我没找到debug perl的插件)

Sublime运行Perl程序(不支持debug)http://blog.sina.com.cn/s/blog_565e192a0101q1ve.html

sublime text 是一个功能强大的文本编辑器而已, 而不是真正意义上的IDE。 像打断点调试这种st是做不到的…… 需要用专业的IDE, 比如c#的virtual studio, php的 zend studio, ruby的rubymine 等等。
但是装了插件就能支持debug了。 Sublime Text比较适合用于进行Ruby/Python/Lua的脚本撰写,可惜的是它自带的Build系统里并不包含Lua。
使用Sublime Text搭建python调试环境 http://blog.csdn.net/wenxuansoft/article/details/38559731
神器sublime2配置xdebug调试PHP http://lobert.iteye.com/blog/2068638
Sublime Text 2配置Lua开发环境 build lua(不支持debug) http://blog.csdn.net/qingye2008/article/details/22267143
Sublime运行Perl程序(不支持debug) http://blog.sina.com.cn/s/blog_565e192a0101q1ve.html

之前的主力编辑器是komodo ,后来转sublime了,再后来转atom(支持github好点,但太新了)

sublime text 是所有编辑器里边支持emmet比较好的的唯一一款(但是不内置emmet)。

  • 10. atom & 插件(免费。我没找到debug perl的插件)

Perl的调试方法的更多相关文章

  1. 嵌入式linux应用程序调试方法

    嵌入式linux应用程序调试方法 四 内存工具 五 C/C++代码覆盖.性能profiling工具 四 内存工具 您肯定不想陷入类似在几千次调用之后发生分配溢出这样的情形. 许多小组花了许许多多时间来 ...

  2. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  3. linux Ubuntu(Segmentation fault)段错误出现原因及调试方法

      在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ----------- ...

  4. kernel启动console_init之前console不可用时发生crash的调试方法

    http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...

  5. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  6. 【matlab】MATLAB程序调试方法和过程

    3.8  MATLAB程序的调试和优化 在MATLAB的程序调试过程中,不仅要求程序能够满足设计者的设计需求,而且还要求程序调试能够优化程序的性能,这样使得程序调试有时比程序设计更为复杂.MATLAB ...

  7. 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  8. Linux的段错误调试方法

    linux段错误的调试方法 相关博文: http://blog.csdn.net/htianlong/article/details/7439030 http://www.cnblogs.com/pa ...

  9. Linux - Shell脚本调试方法

    Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...

随机推荐

  1. Java中ArrayList的使用

    //创建ArrayList ArrayList arr  = new ArrayList(); //ArrayList添加数据 arr.add("123"); arr.add(&q ...

  2. POJ 3259 Wormholes(SPFA+邻接表)

    ( ̄▽ ̄)" #include<iostream> #include<cstdio> #include<queue> #include<vector ...

  3. hdu_5618_Jam's problem again(cdq分治+lowbit)

    题目链接:hdu_5618_Jam's problem again 题意: 给你n个点,每个点有一个坐标(x,y,z),找出有ans个点,3个坐标都比该点小,这个点的level就为ans,然后让你输出 ...

  4. 禁止使用test类的就是禁止使用本来的$this对象.可以调用父类的对象

    public function __construct() { parent::__construct( ); parent::__construct( ); if(!APP_DEBUG ) die( ...

  5. 如何提升 CSS 选择器性能

    CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...

  6. Struts国际化

    第一步需要建立配置文件 格式为      文件名_zh_CN.properties    为中文配置文件   文件名_en_US.properties为美式英语配置文件 配置文件里面的值以键值对的形式 ...

  7. Docker安装目录

    操作系统为 # cat /etc/redhat-release CentOS Linux release (Core) docker安装 # yum install -y docker docker安 ...

  8. Excel教程(4) - 数据库函数

    DAVERAGE 用途:返回数据库或数据清单中满足指定条件的列中数值 的平均值.     语法:DAVERAGE(database,field,criteria)     参数:Database 构成 ...

  9. js 有关字符串的函数 以及一些和字符串有关的知识

    JS自带函数 concat 将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world"; var ...

  10. HttpClient模拟get,post请求并发送请求参数(json等)

    import java.io.IOException; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org. ...