Perl的调试方法

来源:php

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

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

 

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

Perl调试器的用法: 
缺省的Perl调试器就是perl解释器自己,另外还有图形界面的调试器。由于咱们在开发程序时通常都使用telnet访问服务器,因此这里主要介绍一下缺省的命令行调试器的用法。python

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


调试命令列表以下:(全部命令都在调试提示符下顶格输入,命令大小写有关) 
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:删除全部已安装的附加操做。 git

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调试命令github


全部未识别的命令:看成插入的一条Perl语句执行。(使用eval) 
Perl调试器的功能还有不少,能够设置不少选项来定制调试器的环境,它自己也是用Perl开发的,而且Perl发布中还有接口让你能开发其它的Perl调试器。正则表达式

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

 

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表示准备执行第几条调试命令

一、此时能够输入n,至关于Visual Studio中的F10,进入下一句的调试

二、若是想直接运行到第N行语句,能够在第N行处设置一个断点:b N (将N替换为须要设置断点的行

   号),回车后断点设置成功,能够输入L来查看所设置的全部断点状况,不想查看也能够直接输入c

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

三、想要删除断点能够用 B N (将N替换为须要设置断点的行号),回车后所在行处的断点即被删除,

   也能够经过B *来删除全部的断点

四、想要查看变量的值,经过print 变量名 就能够查看了

五、也能够经过给变量赋值来直接改变调试中脚本里的变量的值,好比直接输入:$debug = 0,这样

   $debug的值就被赋为0了

六、退出调试,只要输入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的编码速度)

 

image

熟悉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,应该是能够知足咱们的要求了。

image  <image

固然,其界面美观度和可操控性都没有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++提供了与外部工具集成的机制,咱们就能够很是方便的执行一个菜单命令来调试当前的脚本: 
    image
    输入命令: 
    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 下载及安装

图 1. EPIC 下载及安装

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

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

如图 2 所示:

图 2. EPIC 下载网址

图 2. EPIC 下载网址

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

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

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

EPIC 编辑环境

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

图 3. EPIC 编辑对话框

图 3. EPIC 编辑对话框

 

配置 Perl 程序运行调试环境

建立工程并输入文件

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

如图 4 所示:

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

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

4. 选择‘ Next ’

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

图 5. 导入文件

图 5. 导入文件

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

配置 Perl 编译器运行环境

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

图 6.Include 文件路径

图 6.Include 文件路径

配置调试对话框

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

如图 7 所示:

图 7. 调试对话框配置 1

图 7. 调试对话框配置 1

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

图 8. 调试对话框配置 2

图 8. 调试对话框配置 2

 

EPIC 调试运行过程

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

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

EPIC 运行程序

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

图 9. EPIC 运行程序界面

图 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 调试窗口

图 10. EPIC 调试窗口

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

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

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

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

如图 11 所示:

图 11. EPIC 调试窗口

图 11. EPIC 调试窗口

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

如图 12 所示:

图 12. EPIC 调试跟踪

图 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.三、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 脚本的控制台输出

572x226

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

 

与您的应用程序交互

对于基本的文本脚本或经过标准输入/输出实现大多数交互的应用程序来讲,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. 带有断点的代码

572x265

 

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

图 16. Breakpoints 视图

530x267

要删除断点,可在源代码相应行处再次右击并选择 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的插件)
相关文章
相关标签/搜索