如何用 Eclipse 調試 Perl 應用程式8/14/2010 11:30:36 PM開始之前
本教程將介紹 Eclipse 的 EPIC 外掛程式提供的調試功能,該外掛程式提供了功能豐富的調試環境 —— 可為 EPIC Perl 開發環境所用且與此開發環境相整合。本教程假設讀者瞭解 Eclipse 環境,並且有使用 Perl 的經驗。
關於本教程
EPIC 結合了兩種有助於 Perl 應用程式測試流程的系統:RegExp 和調試器。RegExp 是一個測試 Perl Regex的介面。Regex是許多 Perl 應用程式的主要組成部分,但保證運算式的正確性是一個非常複雜的問題。使用 EPIC RegExp 視圖,您可以根據已知資料檢查結果,測試並修改Regex。
EPIC Perl 調試器是一種較為傳統的工具,完全整合於 Eclipse 環境之中。除測試本地化指令碼外,EPIC 調試器還可用於調試 Web 及遠程執行 Perl 指令碼,因此是多種環境下的理想工具。
本教程將介紹如何匯入和移動大型應用程式、如何簡化應用程式視圖以使代碼更易於理解,從而也更易於調試。另外還會介紹 EPIC 調試環境,它完全位於 Eclipse 內部,為標準指令碼、CGI 指令碼和Regex提供了一個完整的調試環境。
前提條件
要開始使用 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() 可重新建立一個新變數。
事後調試
在應用程式運行時,利用輸出資訊的輸出函數這種方式正是事後調試的一個例子。此時您並未實際監控應用程式的執行,也沒有嘗試找出應用程式運行過程中的問題,而是將資訊轉儲出來,並等待執行完成。
在互動式調試難以實現的情況下,這一特殊的調試方法廣受人們的歡迎。例如,Just-in-Time 偵錯 CGI 應用程式基底本上是不可能實現的,因為應用程式在遠程伺服器上執行,且由第二應用程式(Web 服務器)執行。不可能即時監控指令碼執行。
因此,事後調試有其用武之地,但也有一些顯而易見的局限性。舉例來說,在不更改代碼的情況下,您無法監控任何變數,而一旦更改了代碼,您就必須再次運行程式,以獲得期望的輸出。
同樣,您無法逐行單步偵錯工具的執行。必須運行整個應用程式,除非您強行停止它。如果要跟蹤函數調用和序列,就需要添加輸出語句,以顯示作出的是怎樣的決策,並顯示順序與序列,除此之外,別無他法可監控或獲得資訊。
Just-in-Time 偵錯
有多種Just-in-Time 偵錯系統(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 服務器執行的,通常通過 網頁瀏覽器輸出其資訊,因此調試起來非常困難,除非您使用本教程一開始提到的事後調試技術。但 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 調試影響的內建 網頁瀏覽器。
調試Regex
調試Regex的艱難程度盡人皆知,調試工作中通常還要構建Regex,並根據不同的指令碼測試其執行。通過使用互動Regex測試系統,您可以加快整個過程。EPIC 外掛程式正是這樣的一個系統。
如果您向 Eclipse 透視圖中添加Regex視圖(開發或調試時),就可以根據已知值輸入和測試單獨的Regex,而無需為此建立指令碼。圖 22 顯示了工作中的 RegExp 視圖。
圖 22. 使用Regex視圖
使用方法時,在頂端的文字框中輸入Regex,在 Match 文字框中輸入作為測試依據的文本。您還可添加選項,如忽略大小寫、匹配多行字串等,只需選中恰當的複選框即可。
若Regex正確,則您會看到一個綠色的指示標記。不正確的運算式則為紅色,未經核對的運算式為黑色。
視圖右側的按鈕用於執行以下操作(由左至右):
Stop execution停止Regex的執行。Step backward在有多個元素(例如,多個組)的Regex中,此按鈕的作用是沿匹配元素向後移動。相應地反白匹配文本中匹配的元素。例如,在圖 22 所示的Regex和匹配文本中,最先匹配的是數字,隨後是名稱。Step forwardStep forward 將向前遍曆Regex中的匹配元素。Run在整個文字區塊上運行Regex。成功啟動並執行塊將以不同的顏色反白, 23 所示。
圖 23. 運行整個Regex
在調試標準指令碼時,Regex調試器/測試器視圖也變為可用。您甚至可以設定一個特殊的Regex斷點。
現在您應該已經學會了如何利用 EPIC 調試您的 Perl CGI 應用程式。
結束語
在本教程中,我們介紹了調試 Perl 指令碼時可以使用的方法。從在傳統 Perl 開發環境中所使用的方法開始。總體而言,其中包括兩種方式,使用 print() 函數並監控輸出或使用 Perl 所提供的調試器。這兩種方法都有一些局限性。
利用 EPIC —— Eclipse 的 Perl 開發環境外掛程式,您可以調試 Perl 指令碼和 Perl CGI 應用程式。您希望一個調試器具備的一切功能都可以通過 EPIC 獲得,包括單步處理、變數監控,以及設定斷點並監控指令碼的執行。您還可以通過 Eclipse/EPIC 調試 CGI 指令碼,利用在 Eclipse 中運行指令碼同時直接將指令碼輸出定位到 網頁瀏覽器(包括 Eclipse 所提供的內建 網頁瀏覽器)這樣的方式即可。最後,我們還介紹了在指令碼內調試Regex的方法 —— 特別地,可在開發過程中實現這樣的調試。
通過本教程介紹的 EPIC 所提供的功能,以及 “Build Perl applications with Eclipse” 教程中所介紹的功能,您可以瞭解,該外掛程式提供了一個完整的環境,可使您在 Eclipse 內開發與測試 Perl 應用程式。