如何用 Eclipse 調(diào)試 Perl 應(yīng)用程序
8/14/2010 11:30:36 PM
本教程將介紹 Eclipse 的 EPIC 插件提供的調(diào)試功能,該插件提供了功能豐富的調(diào)試環(huán)境 —— 可為 EPIC Perl 開發(fā)環(huán)境所用且與此開發(fā)環(huán)境相集成。本教程假設(shè)讀者了解 Eclipse 環(huán)境,并且有使用 Perl 的經(jīng)驗。
關(guān)于本教程
EPIC 結(jié)合了兩種有助于 Perl 應(yīng)用程序測試流程的系統(tǒng):RegExp 和調(diào)試器。RegExp 是一個測試 Perl 正則表達式的接口。正則表達式是許多 Perl 應(yīng)用程序的主要組成部分,但保證表達式的正確性是一個非常復(fù)雜的問題。使用 EPIC RegExp 視圖,您可以根據(jù)已知數(shù)據(jù)檢查結(jié)果,測試并修改正則表達式。
EPIC Perl 調(diào)試器是一種較為傳統(tǒng)的工具,完全集成于 Eclipse 環(huán)境之中。除測試本地化腳本外,EPIC 調(diào)試器還可用于調(diào)試 Web 及遠程執(zhí)行 Perl 腳本,因此是多種環(huán)境下的理想工具。
本教程將介紹如何導(dǎo)入和 移動 大型應(yīng)用程序、如何簡化應(yīng)用程序視圖以使代碼更易于理解,從而也更易于調(diào)試。另外還會介紹 EPIC 調(diào)試環(huán)境,它完全位于 Eclipse 內(nèi)部,為標(biāo)準(zhǔn)腳本、CGI 腳本和正則表達式提供了一個完整的調(diào)試環(huán)境。
前提條件
要開始使用 EPIC,需要滿足以下前提條件:
Eclipse V3.1 或 3.0
Java ? 技術(shù) V1.3、1.4 或更高版本
Perl V5.8.6 或更高版本。絕大多數(shù) UNIX ?、 Linux ? 安裝及 Mac OS X 中都包含 Perl。Windows? 上使用 ActivePerl。
Eclipse 的 EPIC 插件
PadWalker Perl 模塊。ActiveState 版本 也可。
傳統(tǒng) Perl 調(diào)試技術(shù)
在介紹 EPIC 之前,讓我們首先來看看 Perl 所使用的傳統(tǒng)調(diào)試技術(shù),這些技術(shù)隨時可用,并且確實有一些優(yōu)點。但它們也有著自身的局限性。理解其局限性有助于您理解為何需要一種更好的調(diào)試環(huán)境。
Perl 中的調(diào)試簡介
如果您問一位典型的 Perl 程序員怎樣調(diào)試其應(yīng)用程序,他多半會告訴您他只是使用簡單的輸出語句,在程序執(zhí)行時轉(zhuǎn)儲信息。例如,您可向循環(huán)中添加一條簡單的語句,來輸出您正在計算或處理的值,如清單 1 所示。
清單 1. 使用輸出語句進行調(diào)試
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();
在這種情況下,您已輸出了從數(shù)據(jù)庫 ( MySQL ) 載入到 STDERR 的行轉(zhuǎn)儲。STDERR 使用起來非常方便,這是因為在 UNIX 主機上,您可將 STDERR 的輸出重定位到日志文件,同時使其他輸出照常定位到標(biāo)準(zhǔn)輸出。
示例中的 Dumper() 函數(shù)會實際輸出任何變量的結(jié)構(gòu),包括嵌入式和嵌套的數(shù)組、散列及其他內(nèi)容。輸出格式與您手動生成的結(jié)構(gòu)形式相同。此函數(shù)(Data::Dumper 模塊的一部分)非常有用,既可作為以適于人類閱讀的格式輸出變量的方法,也可用于寫入一個能讀回的結(jié)構(gòu),使用 eval() 可重新創(chuàng)建一個新變量。
事后調(diào)試
在應(yīng)用程序運行時,利用輸出信息的輸出函數(shù)這種方式正是事后調(diào)試的一個例子。此時您并未實際監(jiān)控應(yīng)用程序的執(zhí)行,也沒有嘗試找出應(yīng)用程序運行過程中的問題,而是將信息轉(zhuǎn)儲出來,并等待執(zhí)行完成。
在交互式調(diào)試難以實現(xiàn)的情況下,這一特殊的調(diào)試方法廣受人們的歡迎。例如,實時調(diào)試 CGI 應(yīng)用程序基本上是不可能實現(xiàn)的,因為應(yīng)用程序在遠程 服務(wù)器 上執(zhí)行,且由第二應(yīng)用程序(Web 服務(wù)器)執(zhí)行。不可能實時監(jiān)控腳本執(zhí)行。
因此,事后調(diào)試有其用武之地,但也有一些顯而易見的局限性。舉例來說,在不更改代碼的情況下,您無法監(jiān)控任何變量,而一旦更改了代碼,您就必須再次運行程序,以獲得期望的輸出。
同樣,您無法逐行單步調(diào)試程序的執(zhí)行。必須運行整個應(yīng)用程序,除非您強行停止它。如果要跟蹤函數(shù)調(diào)用和序列,就需要添加輸出語句,以顯示作出的是怎樣的決策,并顯示順序與序列,除此之外,別無他法可監(jiān)控或獲得信息。
實時調(diào)試
有多種實時調(diào)試系統(tǒng)(Perl 自帶的調(diào)試器就是其中之一),您可從使用 -d 命令行選項入手(參見清單 2)。該命令行選項會啟動一個交互式會話,通過此會話即可逐行單步調(diào)試、跳過代碼段、監(jiān)控變量和值,甚至在執(zhí)行過程中修改值。
清單 2. 使用 Perl 調(diào)試器
$ 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
本例中的文本界面很清晰,但依然難以理解發(fā)生了什么事、顯示了什么信息、當(dāng)前在代碼特定部分中的哪處執(zhí)行。
有一些 GUI 可供 Perl 調(diào)試器使用,但通過這些界面能實現(xiàn)的功能依然有限。最重要的是,通過這樣的界面調(diào)試 Web 應(yīng)用程序非常困難。
無論在哪種情況下,上述調(diào)試系統(tǒng)的主要局限性均在于:它們都是您必須添加到 編程 工具箱中的其他工具。但任何一種都未為您的開發(fā)環(huán)境提供集成化的解決方案。
這正是 Eclipse/EPIC Perl 調(diào)試器發(fā)揮巨大優(yōu)勢的場合。它內(nèi)置于 Eclipse 系統(tǒng)之中,因此,允許您在同一應(yīng)用程序內(nèi)同時實現(xiàn)開發(fā)、編輯和調(diào)試。
在 EPIC 中導(dǎo)入和處理現(xiàn)有項目
上面已經(jīng)介紹了傳統(tǒng)的 Perl 調(diào)試技術(shù),現(xiàn)在是 EPIC 登場的時候了,下面將介紹在項目中遍歷的方法 —— 對于代碼執(zhí)行和調(diào)試來說,這是一項至關(guān)重要的技巧。要研究實現(xiàn)此目標(biāo)的最佳方法,需要以一個大型項目作為示例。為使項目進入 Eclipse,您將使用導(dǎo)入系統(tǒng)將文件添加到新項目中。
運行導(dǎo)入
要了解如何調(diào)試應(yīng)用程序,一個好方法就是首先將已開發(fā)出的應(yīng)用程序?qū)肽南到y(tǒng)中。這將為您奠定良好的基礎(chǔ),并使您有機會了解如何在大型項目中遍歷 —— 在使用調(diào)試器接口時,這是一項必備的技巧。
按以下步驟操作即可導(dǎo)入一組現(xiàn)有文件:
若必要,創(chuàng)建一個新項目(若想將文件添加到您自己的項目中,也可使用現(xiàn)有項目)。
在 File 菜單中選擇 Import。
從可用導(dǎo)入源清單中選擇 File system,參見圖 1。
圖 1. 選擇導(dǎo)入源
單擊 Next。
在下一面板中單擊 Browse,選擇導(dǎo)入操作的源文件夾。文件夾將顯示在左側(cè)的面板中。源文件夾中的其他文件夾則以樹型結(jié)構(gòu)顯示在此列表中。選中文件夾中的文件則顯示在右側(cè)的面板中。
單擊所顯示文件夾旁邊的復(fù)選框。也可按照同樣的機制選擇多個獨立文件和文件夾。
您可選擇至此完成,但有時,您可能不想導(dǎo)入此文件夾中的其他文件。手動選擇文件非常復(fù)雜,您可利用過濾器自動選擇文件導(dǎo)入:
若想僅選擇 Perl 文件(通常是以 .pl —— 即腳本、.pm —— 即模塊結(jié)尾的那些文件),請單擊 Filter Types 按鈕。
您將看到一個可能文件類型的清單提示(參見圖 2)。所有的 Perl 文件類型旁都帶有駱駝圖標(biāo)。單擊您希望導(dǎo)入的文件類型旁的復(fù)選框。
圖 2. 選擇要導(dǎo)入的文件類型
如果您為 Perl 文件使用了非標(biāo)準(zhǔn)擴展名,可通過 Other Extensions 文本框添加您的擴展名。
確定最終的擴展名清單后,單擊 OK。
最好檢查一下已選擇了哪個文件。從源文件夾中選擇的各文件旁應(yīng)已有復(fù)選框。在圖 3 中可看到過濾后文件的示例。
圖 3. 查看要導(dǎo)入的文件/文件夾
如果確認(rèn)已選好的導(dǎo)入文件/文件夾無誤,即可單擊 Into Folder 文本框旁的 Browse 按鈕。系統(tǒng)將要求您選擇導(dǎo)入文件的目標(biāo)項目文件夾。
單擊 Finish。
項目已成功導(dǎo)入,下面將介紹如何在項目中遍歷。
遍歷大型項目
遍歷項目的方法有兩種,具體選擇哪種取決于您的位置。您可利用 Navigator 視圖瀏覽整個項目。此時可看到一個或多個打開項目的獨立文件夾和其中的文件。圖 4 給出了一個示例。
選中要在 Editor 中查看的特定文件后,Outline 視圖會顯示已導(dǎo)入文件中的模塊以及文件內(nèi)定義的所有子例程。兩者結(jié)合在一起,使文件布局和功能更易于理解。要跳過特定子例程,可在 Outline 視圖內(nèi)雙擊其名稱。圖 5 給出了一個 Outline 視圖窗口的示例。
EPIC 的 AutoLoader 限制
值得注意的是,某些流行的 Perl 結(jié)構(gòu)和技術(shù)在 EPIC/Eclipse 中無法使用。AutoLoader 系統(tǒng)中就存在著一個這樣的限制,該系統(tǒng)提供了一種靈活、高效的途徑,可將模塊分割成較小的文件,在執(zhí)行期間自動載入。
AutoLoader 系統(tǒng)的工作方式是,將除存根自動加載器 (stub auto-loader) 以外的所有代碼置入文件的文本部分中。這一文本部分通常用于存儲腳本數(shù)據(jù)(而非使用外部文件來存儲),因此假設(shè)它將會被忽略是安全的。但遺憾的是,這也意味著 Eclipse 會完全忽略此代碼。
代碼折疊
可讀性使代碼易于理解,對調(diào)試代碼大有裨益。EPIC 插件提供的工具首先使代碼具有良好的格式,從而更具可讀性,并且更容易隱藏不再需要或不再希望看到的子例程及組件。
代碼折疊 使您能夠隱藏給定子例程的定義。除了子例程聲明存根依然顯示外,子例程代碼定義的其他部分都可隱藏。
如果在編輯器窗口中查看 RSS Feeder 腳本,將看到各子例程左側(cè)列中有一個短線標(biāo)記,如圖 6 所示。
若單擊 parse_items_to_text() 旁的短線標(biāo)記,整個子例程定義將隱藏起來。關(guān)于折疊后的子例程定義示例,請參加圖 7。
折疊后原短線標(biāo)記將變?yōu)榧犹枠?biāo)記(強調(diào)代碼已折疊)。單擊加號標(biāo)記將立即展開代碼,重新顯示出定義。
運行 Perl 應(yīng)用程序
現(xiàn)在,您應(yīng)該對如何利用 EPIC 簡便地遍歷項目有了很好的理解。但在開始調(diào)試應(yīng)用程序之前,應(yīng)首先了解一下如何運行應(yīng)用程序。要運行應(yīng)用程序,需要創(chuàng)建一個新的運行配置。
RSS Feeder 應(yīng)用程序
RSS Feeder 應(yīng)用程序的基礎(chǔ)知識已在 “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" );
}
}
這段腳本由一個處理散列的基本循環(huán)構(gòu)成,首先下載 RSS 提要源(使用 LWP),然后解析源(使用 XML::RSS)。所得到的對象將用于輸出 RSS 提要項的簡單文本表示。
為執(zhí)行而配置應(yīng)用程序
在介紹調(diào)試的細節(jié)之前,您首先應(yīng)了解運行當(dāng)前在 Eclipse 內(nèi)開發(fā)的應(yīng)用程序的基礎(chǔ)知識。本節(jié)將延用介紹在 Eclipse 中開發(fā) Perl 應(yīng)用程序的教程中所生成的 RSS Feeder 應(yīng)用程序。我已利用本教程前面所介紹的技術(shù)將此應(yīng)用程序的文件導(dǎo)入系統(tǒng)。
請按以下步驟配置欲執(zhí)行的項目中的腳本:
從 Run 菜單中選擇 Run。您將看到一個如圖 8 所示的對話框:
圖 8. 設(shè)置默認(rèn) Run 配置
選擇 Perl Local 項,并配置在調(diào)試或運行一個本地 Perl 腳本(非遠程或 CGI)時所使用的透視圖。運行腳本時,您的透視圖將自動切換為此處所配置的透視圖。
確保在此對話框左側(cè)的配置列表中選中了 Perl Local,且選擇了 New。您將看到用于創(chuàng)建新 Run 配置的對話框,如圖 9 所示。
圖 9. 添加新 Run 配置
配置您想執(zhí)行的項目和腳本的名稱。請注意,您也可以向腳本中添加任何命令行選項。切記添加配置名稱,務(wù)必注意此配置特定于此項目中的此腳本。
您也可以通過 Conmon 面板設(shè)置特定選項,例如將輸出發(fā)送到哪里、是否將此添加到 Run 菜單的可用腳本中以執(zhí)行、是否啟用控制臺等(參見圖 10)。
圖 10. Common 配置面板
單擊 Apply,再單擊 Close 保存配置。
激活配置后,即可隨時運行您的腳本。
運行您的應(yīng)用程序
既然已經(jīng)獲得了活動的 Run 配置,您就可以執(zhí)行您的腳本,并測定它是否按照您期待的方式工作。
第一次運行您所配置的腳本時,需要手動選擇配置。但這樣的手動選擇僅需一次,此后可在 Run 菜單中直接將其作為 “歷史” 項目選擇并再次運行。您還可編輯 Run 配置選項,明確地將該腳本添加到 Run 菜單中。
初次運行您的配置時,請按以下步驟進行操作:
從 Run 菜單中選擇 Run。
從左側(cè)的配置列表中選擇配置。
選擇 Run。
您的腳本將被執(zhí)行,且其輸出被發(fā)送到 Eclipse Console。
如果您未在 Eclipse 中打開 Console 視圖,可在 Window 菜單中選擇 Console 視圖打開它。
圖 11 展示了此 RSS Feeder 腳本的部分輸出示例。
您未必希望只是單純地運行應(yīng)用程序,而不通過某種方式監(jiān)控或處理應(yīng)用程序,下面我們將就此進行介紹。
與您的應(yīng)用程序交互
對于基本的文本腳本或通過標(biāo)準(zhǔn)輸入/輸出實現(xiàn)大多數(shù)交互的應(yīng)用程序來說,Eclipse 的 Console 視圖足以應(yīng)付。當(dāng)然,通過此界面能實現(xiàn)的交互是有限的,您可能會希望至少要增加控制臺視圖的大小,使其更便于使用。
如果您創(chuàng)建了一個運行配置的 CGI,執(zhí)行模型會略有不同。原因在于 EPIC 創(chuàng)建到腳本的臨時 CGI 接口的方式,以及通過內(nèi)置 Web 客戶機或第三方客戶機 —— 如 Internet Explorer、Safari 或 Firefox —— 提供 CGI 輸出的方式。
在您調(diào)試 —— 而非單純地執(zhí)行 —— 應(yīng)用程序時,CGI 腳本接口充分的交互性更有意義。調(diào)試通常需要較多的交互,因此下面我們將介紹調(diào)試過程中腳本執(zhí)行的細節(jié)。
調(diào)試標(biāo)準(zhǔn)應(yīng)用程序
既然您已經(jīng)理解了如何利用 EPIC 遍歷項目并運行應(yīng)用程序,那么下面將開始介紹標(biāo)準(zhǔn)應(yīng)用程序的調(diào)試。
需要您完成的工作僅僅是將標(biāo)準(zhǔn) Run 環(huán)境的配置更改為調(diào)試配置。Eclipse 隨后會提供一個調(diào)試透視圖,該透視圖支持標(biāo)準(zhǔn)調(diào)試工具(如斷點),并且能夠使您在執(zhí)行過程中查看變量。
為調(diào)試而配置應(yīng)用程序
請按以下步驟配置項目中要調(diào)試的腳本:
從 Run 菜單中選擇 Debug。您將看到如圖 12 所示的對話框。
圖 12. 調(diào)試配置
選擇 Perl Local 項,并配置在調(diào)試本地 Perl 腳本(非遠程或 CGI)時所使用的透視圖。運行腳本時,您的視圖將自動切換為此處所配置的透視圖。由于您是為調(diào)試而進行配置,所以請選擇 Eclipse Debug 透視圖。
您可以選擇創(chuàng)建新配置,也可使用現(xiàn)有配置。要創(chuàng)建新配置,請在本對話框左側(cè)的配置列表中選擇 Perl Local,然后單擊 NewY。隨后將看到用于創(chuàng)建新 Debug 配置的對話框,如圖 13 所示。
圖 13. 添加新 Debug 配置
配置要執(zhí)行的項目和腳本的名稱,請注意,您也可以向腳本中添加任何命令行選項。切記添加配置名稱,務(wù)必注意此配置特定于此項目中的此腳本。
單擊 Apply,再單擊 Close 保存配置。
激活配置后,即可隨時調(diào)試您的腳本。單擊 Debug 可啟動調(diào)試過程。
Eclipse 調(diào)試界面
Eclipse 的調(diào)試透視圖為 Eclipse 中的絕大多數(shù)調(diào)試系統(tǒng)共享和使用,包括在調(diào)試 C/C++ 和 Java 應(yīng)用程序時。圖 14 展示了調(diào)試透視圖的一個示例。
調(diào)試透視圖由多個默認(rèn)視圖構(gòu)成,包括:
Debug 視圖本視圖展示了正在運行的腳本,包括單獨腳本中的多個線程。圖 15 給出了此視圖的一個特寫。此處該視圖中顯示的是正在運行的腳本 (Main Thread) 和 Perl Debugger 線程(用作運行腳本的接口)。請注意圖中還顯示了腳本中執(zhí)行暫停時所在的行。如果您從視圖中選擇此項,則源代碼中的相應(yīng)行將顯示出來。Variables 視圖本視圖可用于顯示變量值,其輸出類似與本教程前面介紹傳統(tǒng)調(diào)試方法時提到的 Dumper() 函數(shù)所產(chǎn)生的輸出。后面我們將更詳細地介紹如何配置要查看的變量。Breakpoints 視圖本視圖顯示了為所調(diào)試的應(yīng)用程序配置的斷點。后面我們將更詳細地介紹配置斷點的相關(guān)內(nèi)容。
其他視圖您應(yīng)該已比較熟悉,如編輯器視圖、項目大綱視圖和控制臺視圖等。
開始調(diào)試應(yīng)用程序后,您會希望開始單步執(zhí)行代碼行,并監(jiān)控輸出。調(diào)試器自動在可執(zhí)行代碼的第一行處停止(導(dǎo)入所有模塊后)。
單步執(zhí)行所調(diào)試的應(yīng)用程序
單步執(zhí)行所調(diào)試的應(yīng)用程序使您能夠逐行、逐函數(shù)調(diào)用地監(jiān)控腳本的執(zhí)行。通過單步執(zhí)行,您可以通過函數(shù)調(diào)用、測試語句等跟蹤執(zhí)行,還可在代碼執(zhí)行期間監(jiān)控變量值。
Eclipse 支持 5 種 step 模式,但在大多數(shù)情況下,EPCI 插件僅支持前三種。可利用工具欄上的 Step 按鈕(工具欄面板右側(cè)的后 5 個按鈕):
Step Into —— 進入函數(shù)、循環(huán)或其他語句。若函數(shù)可用,調(diào)試器將顯示源代碼,并允許您單步執(zhí)行源代碼。
Step Over —— 跳過一條語句,轉(zhuǎn)向代碼中的下一條語句。
Step return —— 若您已進入函數(shù),則執(zhí)行函數(shù)中的全部代碼,包括其返回語句。
您可以單擊 “Play” 按鈕(正是您的 VCR play 按鈕)重新開始執(zhí)行,直到預(yù)先配置好的斷點或腳本末 —— 以先滿足的條件為準(zhǔn) —— 處停止,利用類似于 VCR 的 Pause 按鈕暫停,使用 Stop 按鈕完全停止執(zhí)行。
如果您停止了執(zhí)行,想在同一腳本上重新啟動調(diào)試過程,可右擊過程,并在菜單中選擇 Relaunch。
添加/刪除斷點
有時您希望在腳本執(zhí)行過程中暫停或停止執(zhí)行,斷點正是代碼中執(zhí)行暫停或停止時所在的行。可想而知,斷點的功能正是在該點中斷執(zhí)行。
為配置斷點,請在源代碼中要添加斷點的行旁邊的邊框處右擊。
您將看到一個提示菜單,允許您在代碼此處添加斷點。在設(shè)置斷點時,您會發(fā)現(xiàn)啟用行號是非常有用的(通過同一提示菜單即可實現(xiàn))。
添加斷點后,代碼行旁會出現(xiàn)一個斷點圖標(biāo),如圖 15 所示。斷點圖標(biāo)顯示在源代碼第 6 行的旁邊。
您還可以使用 Breakpoints 視圖訪問已配置斷點的列表(如圖 16 所示),其中列出了項目中所有已配置斷點的類型、文件和行號。
要刪除斷點,可在源代碼相應(yīng)行處再次右擊并選擇 Remove Breakpoint,也可從斷點列表中選擇要刪除的斷點,然后右擊它,按同樣方式刪除。您還可以啟用和禁用斷點,若您在調(diào)試同一代碼且想監(jiān)控相同的位置,但不必同時進行監(jiān)控,那么這一功能是很方便的。
監(jiān)控變量
選中正在運行的線程后,當(dāng)前范圍內(nèi)的全部變量將以列表形式顯示在 Variables 視圖中。圖 17 給出了 Variables 視圖的示例。
對絕大多數(shù)調(diào)試器而言,僅在您明確將變量添加到要監(jiān)控的變量列表后才能顯示變量,EPIC 調(diào)試器與此不同,它會自動顯示當(dāng)前范圍內(nèi)的所有變量。如您所見,這里也顯示了變量的全部細節(jié)信息,您可以使用樹型界面來審查腳本中像嵌套數(shù)組和散列這樣的復(fù)雜結(jié)構(gòu)的值。請注意,本地變量帶有一個包含 “L” 的圖標(biāo),其他所有變量則使用標(biāo)準(zhǔn)變量圖標(biāo)。
在上一次執(zhí)行后發(fā)生了變化的變量會以紅色突出顯示。這使得在單步執(zhí)行應(yīng)用程序時尋找所更改的變量變得輕而易舉。
除在您的腳本中所定義的變量外(包括當(dāng)前塊的全局變量和局部變量),變量視圖還會默認(rèn)地顯示腳本中間接使用的一些全局變量。例如,它會顯示特殊 STDIN、STDOUT 和 STDERR 變量的值。
您還可選擇顯示內(nèi)部 Perl 變量(例如 $$、%ENV 等)。單擊 View 菜單,選擇 Show Perl Internal Variables 即可。圖 18 顯示了一個啟用了此功能的 Variable 視圖。
圖 18. 顯示標(biāo)準(zhǔn)內(nèi)部變量
切記 Variable 視圖僅顯示當(dāng)前范圍內(nèi)的變量或全局變量。它不會顯示當(dāng)前范圍內(nèi)(函數(shù)、循環(huán)、塊,甚至是模塊或包)不可用的變量。
調(diào)試 Perl CGI 應(yīng)用程序
至此,您已經(jīng)了解了使用 EPIC 調(diào)試 Perl 應(yīng)用程序的好處,那么對于 Per CGI 應(yīng)用程序來說,情況又如何呢?由于 CGI 應(yīng)用程序是由 Web 服務(wù)器執(zhí)行的,通常通過 Web 瀏覽器輸出其信息,因此調(diào)試起來非常困難,除非您使用本教程一開始提到的事后調(diào)試技術(shù)。但 EPIC 為此類問題提供了一種獨特的解決方案。
配置 CGI 調(diào)試會話
要調(diào)試 Perl CGI 腳本,您需要具備一個正常工作的可用 Web 服務(wù)環(huán)境,如 Apache 或 IIS ,且能夠向 IIS 目錄中寫入信息。EPIC 調(diào)試 CGI 應(yīng)用程序的方式就是作為 Web 服務(wù)器與客戶機之間的代理。這使其能夠控制和監(jiān)控腳本的執(zhí)行,即便從技術(shù)上來說,腳本是通過 Web 服務(wù)器存取的。
請按以下步驟配置 CGI 調(diào)試會話:
從 Run 菜單中選擇 Debug,打開 Debug 配置窗口。
從可用配置類型列表中選擇 Perl CGI 配置。
單擊 New 創(chuàng)建新配置。
在 Configuration 面板中(如圖 19 所示)選擇要調(diào)試的項目。可以在 Web Server 面板中按擴展名選擇 CGI 腳本。
圖 19. Configuration 面板
在 Web Server 控制面板中(如圖 20 所示)為已配置的 Web 服務(wù)器配置 HTML 和 CGI 目錄。您需要將腳本復(fù)制到此目錄中(可使用 Eclipse 的 Export 函數(shù))。還需要配置在調(diào)試時要用到的 “啟動” 文件的名稱。此文件將在首次訪問 Web 服務(wù)器時返回,其中應(yīng)包含到腳本的鏈接,或使用腳本的表單。
圖 20. Web Server 面板
若您需要設(shè)置自定義 CGI 環(huán)境變量,可使用 CGI Environment 面板來設(shè)置這些變量及其值。
在 Browser 面板中,選擇您想用于調(diào)試腳本的瀏覽器。我發(fā)現(xiàn)內(nèi)置瀏覽器往往是最佳選擇。
單擊 Apply。
單擊 Debug 啟動調(diào)試過程。
調(diào)試 Perl CGI 腳本
運行 Perl CGI 腳本后,即可執(zhí)行在調(diào)試標(biāo)準(zhǔn)腳本時所執(zhí)行的全部功能。您同樣可以單步執(zhí)行、監(jiān)控變量、設(shè)置斷點以中斷執(zhí)行。
在圖 21 中可看到 Perl CGI 腳本形式的 RSS Feeder 應(yīng)用程序的執(zhí)行示例。
了解了 Eclipse 作為腳本和實際 Web 服務(wù)器之間的代理工作的方法后,您就可以控制執(zhí)行了。甚至可輕而易舉地監(jiān)視和控制腳本中 HTML 的個別輸出。以這種方法調(diào)試 CGI 腳本時,超時期通常較長,某些瀏覽器在這種情況下會出現(xiàn)問題。因此我建議使用更能容納 CGI 調(diào)試影響的內(nèi)置 Web 瀏覽器。
調(diào)試正則表達式
調(diào)試正則表達式的艱難程度盡人皆知,調(diào)試工作中通常還要構(gòu)建正則表達式,并根據(jù)不同的腳本測試其執(zhí)行。通過使用交互式的正則表達式測試系統(tǒng),您可以加快整個過程。EPIC 插件正是這樣的一個系統(tǒng)。
如果您向 Eclipse 透視圖中添加正則表達式視圖(開發(fā)或調(diào)試時),就可以根據(jù)已知值輸入和測試單獨的正則表達式,而無需為此創(chuàng)建腳本。圖 22 顯示了工作中的 RegExp 視圖。
使用方法時,在頂端的文本框中輸入正則表達式,在 Match 文本框中輸入作為測試依據(jù)的文本。您還可添加選項,如忽略大小寫、匹配多行字符串等,只需選中恰當(dāng)?shù)膹?fù)選框即可。
若正則表達式正確,則您會看到一個綠色的指示標(biāo)記。不正確的表達式則為紅色,未經(jīng)核對的表達式為黑色。
視圖右側(cè)的按鈕用于執(zhí)行以下操作(由左至右):
Stop execution停止正則表達式的執(zhí)行。Step backward在有多個元素(例如,多個組)的正則表達式中,此按鈕的作用是沿匹配元素向后移動。相應(yīng)地突出顯示匹配文本中匹配的元素。例如,在圖 22 所示的正則表達式和匹配文本中,最先匹配的是數(shù)字,隨后是名稱。Step forwardStep forward 將向前遍歷正則表達式中的匹配元素。Run在整個文本塊上運行正則表達式。成功運行的塊將以不同的顏色突出顯示,如圖 23 所示。
在調(diào)試標(biāo)準(zhǔn)腳本時,正則表達式調(diào)試器/測試器視圖也變?yōu)榭捎谩D踔量梢栽O(shè)置一個特殊的正則表達式斷點。
現(xiàn)在您應(yīng)該已經(jīng)學(xué)會了如何利用 EPIC 調(diào)試您的 Perl CGI 應(yīng)用程序。
結(jié)束語
在本教程中,我們介紹了調(diào)試 Perl 腳本時可以使用的方法。從在傳統(tǒng) Perl 開發(fā)環(huán)境中所使用的方法開始。總體而言,其中包括兩種方式,使用 print() 函數(shù)并監(jiān)控輸出或使用 Perl 所提供的調(diào)試器。這兩種方法都有一些局限性。
利用 EPIC —— Eclipse 的 Perl 開發(fā)環(huán)境插件,您可以調(diào)試 Perl 腳本和 Perl CGI 應(yīng)用程序。您希望一個調(diào)試器具備的一切功能都可以通過 EPIC 獲得,包括單步處理、變量監(jiān)控,以及設(shè)置斷點并監(jiān)控腳本的執(zhí)行。您還可以通過 Eclipse/EPIC 調(diào)試 CGI 腳本,利用在 Eclipse 中運行腳本同時直接將腳本輸出定位到 Web 瀏覽器(包括 Eclipse 所提供的內(nèi)置 Web 瀏覽器)這樣的方式即可。最后,我們還介紹了在腳本內(nèi)調(diào)試正則表達式的方法 —— 特別地,可在開發(fā)過程中實現(xiàn)這樣的調(diào)試。
通過本教程介紹的 EPIC 所提供的功能,以及 “Build Perl applications with Eclipse” 教程中所介紹的功能,您可以了解,該插件提供了一個完整的環(huán)境,可使您在 Eclipse 內(nèi)開發(fā)和測試 Perl 應(yīng)用程序。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
