Perl語言中Perl調(diào)試概述
本文和大家重點討論一下Perl調(diào)試的概念,Perl調(diào)試與狩獵沒什么不同。***步是檢測錯誤(通過觀察錯誤的行為并確認其模式)。在這個階段,錯誤只是一些癥狀。然后就是解決錯誤和修正錯誤。
功能豐富的Perl:Perl調(diào)試的技巧
錯誤所帶來的麻煩
軟件開發(fā)人員通常都低估了軟件測試的重要性。這一現(xiàn)象的根本原因很簡單:處理錯誤很困難!因為錯誤往往暴露了代碼的根本缺陷,所以有時候開發(fā)人員甚至?xí)榱藥讉€錯誤而從頭開始重新編寫項目的主要部分。
我認為,調(diào)試如此重要,以至于至少要為其分配整個項目30%的時間。額外的調(diào)試時間將導(dǎo)致更好的產(chǎn)品。另一方面,如果為了更快地推出軟件而縮短調(diào)試時間,那么在軟件生成后,您將花上雙份的時間來修復(fù)那些稍后暴露出的問題。
有三種基本類型的錯誤:編碼錯誤、文檔錯誤和需求錯誤。需求錯誤通常由于需求不嚴密或缺少需求而導(dǎo)致。文檔錯誤存在于手冊或聯(lián)機幫助中。編碼錯誤是由程序員在實現(xiàn)需求時的錯誤而引起的。不幸的是,需求錯誤和文檔錯誤不在本文范圍之內(nèi),因此,我們只好只討論如何“檢測”、“解決”和“修復(fù)”編碼錯誤了。
Perl調(diào)試的基本概念
我們已經(jīng)將編碼錯誤定義成程序員在實現(xiàn)需求時產(chǎn)生的錯誤。編碼錯誤會導(dǎo)致不正確的程序行為(偏離需求的行為)。因此,程序員在編寫或調(diào)試程序之前首先應(yīng)該知道的是程序需求。
Perl調(diào)試與狩獵沒什么不同。***步是檢測錯誤(通過觀察錯誤的行為并確認其模式)。在這個階段,錯誤只是一些癥狀。
第二步是解決錯誤。因為必須要在源代碼中消除錯誤,所以,應(yīng)該有一個精通程序的人來檢查錯誤,并知道這些錯誤的根本原因。如果代碼理解起來更容易,并且現(xiàn)在的代碼沒有比當(dāng)初錯誤版本中的代碼更多,則您可能做對了。
第三步,也是***一步,是修復(fù)錯誤(請注意“修復(fù)”與“解決”是有區(qū)別的)。調(diào)試程序?qū)⒃创a更改放入“現(xiàn)場”的生產(chǎn)過程,然后檢查它是否正確。如果代碼不正確,則表明您沒有解決錯誤,甚至更糟糕的是,可能還引入了新的錯誤。既然解決錯誤的目的不應(yīng)該是引入新錯誤,請確保在解決錯誤之后修復(fù)每個錯誤。
要確保迅速找到錯誤并很好地理解它們,您應(yīng)該對調(diào)試過程中程序使用模塊和類在每個主要分支處的操作非常清楚。當(dāng)然,這要求您對編寫代碼所用的語言(在我們的示例中是Perl)有深入的了解。因為存在所有這些需求,所以很難找到好的軟件測試人員。
Perl調(diào)試器
Perl程序員的***個資源是Perl所帶的調(diào)試器。如您所見,著手使用該調(diào)試器是非常容易的。
用調(diào)試器運行一個腳本
perl-dprogram.pl
Perl調(diào)試器自帶幫助('h'或'hh'分別用于詳細和簡短的幫助屏幕)。perldocperldebug頁面(在命令提示窗口輸入"perldocperldebug")有更完整的Perl調(diào)試器描述。
關(guān)于Perl調(diào)試器的結(jié)論
Emacs編輯器支持Perl調(diào)試器并使其更易于使用。您可以在Emacs中使用Info(輸入M-xinfo)來閱讀有關(guān)GUDEmacs的更詳細信息。GUD是與Perl調(diào)試器一起工作的全局調(diào)試方式(當(dāng)在Emacs中編輯Perl程序時輸入M-xperldb)。
只需少量工作就可以讓vi系列的編輯器也能支持Perl調(diào)試器。有關(guān)詳細信息,請參閱perldocperldebug頁面。有關(guān)其它編輯器的信息,請參考每個編輯器的文檔。
Perl內(nèi)置的調(diào)試器是一個強大的工具,可以執(zhí)行比我們剛剛看到的簡單用法復(fù)雜得多的任務(wù)。但它的確要求使用者具備大量Perl專門知識。正因為如此,我們現(xiàn)在要看一些簡單些的工具,這些工具將更適合初級和中級Perl程序員。
Devel::ptkdb
要使用Devel::ptkdb調(diào)試器,首先得從CPAN(請參閱下面的參考資料)下載它并將它安裝在您的系統(tǒng)上。(某些用戶可能還需要安裝Tk模塊,該模塊也可以從CPAN獲得。)就我個人看來,Devel::ptkdb在UNIX系統(tǒng)(如Linux)上***用。(雖然在理論上Devel::ptkdb并不限于與UNIX兼容的系統(tǒng),但是,我從未聽說過有人成功地在Windows上使用Devel::ptkdb。正如一句老話所講:除了滑雪穿過旋轉(zhuǎn)門之外,任何事都是可能的。)
如果無法讓系統(tǒng)管理員為您安裝(例如,因為您自己就是系統(tǒng)管理員),可以嘗試在命令提示行執(zhí)行以下操作(可能需要以root身份執(zhí)行這些操作):
從CPAN安裝Devel::ptkdb
perl-MCPAN-e'installTk'
perl-MCPAN-e'installDevel::ptkdb'
如果是***次運行CPAN安裝例程,那么,在回答一些初始問題之后,將自動下載并安裝適當(dāng)?shù)哪K。
可以用ptkdb調(diào)試器運行程序,如下所示(使用我們以前的buggy.pl示例):
使用Devel::ptkdb
perl-d:ptkdbbuggy.plbuggy.pl
要閱讀Devel::ptkdb模塊的文檔,請使用命令"perldocDevel::ptkdb"。我們在本文中使用版本1.1071。(
【編輯推薦】