程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 如何用Eclipse調試Perl應用程序

如何用Eclipse調試Perl應用程序

編輯:關於JAVA

開始之前

本教程將介紹 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 登場的時候了,下面將介紹在項目中遍歷的方法 —— 對於代碼執行和調試來說,這是一項至關重要的技巧。要研究實現此目標的最佳方法,需要以一個大型項目作為示例。為使項目進入 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 應用程序。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved