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