Perl篇:常用調(diào)試命令
本文所用到的Perl調(diào)試器為Perl解釋器本身,可以通過-d開關(guān)打開調(diào)試功能。本文不會將涵蓋所有的調(diào)試命令,只會解釋一些我們常用的調(diào)試命令,希望對熱愛Perl的朋友有所幫助。
打開調(diào)試開關(guān)
Perl是解釋型語言,運行一個Perl腳本,可以通過在命令行中敲入形如 Perl Test.pl 的命令直接解釋執(zhí)行。如果想調(diào)試我們的腳本程序,可以加上-d選項,命令為perl -d Test.pl,回車后程序會停在DB<1>處,如下圖所示:
從上圖看出程序執(zhí)行到主(main)程序的第二行(Test.pl 2)
插入/查看/刪除斷點
插入斷點可以使用b命令,命令格式為:b 行號/函數(shù)名 條件,在上圖中DB<1>處即可設(shè)置斷點,如下圖所示:

在子過程SetInitValue處設(shè)置了斷點
查看設(shè)置的斷點使用L命令,注意是大寫,小寫是顯示尚未執(zhí)行到的代碼的部分內(nèi)容,如下圖所示:

斷點設(shè)置在21行處
刪除設(shè)置的斷點請使用B命令,該命令格式為:B 行號| *,可以指定行號來刪除斷點或者使用通配符*來刪除所有的斷點,如下圖所示:

刪除21行處的斷點
增加/查看/刪除監(jiān)視
添加監(jiān)視對于調(diào)試程序非常重要,本示例腳本中定義了一個名叫$val的變量,初始值為1,在SetInitValue函數(shù)中修改值為12。通過對其添加監(jiān)視,來理解Perl中怎么增減刪除監(jiān)視的
添加一個$val==1表達式的監(jiān)視,命令為w $val==1,如下圖所示:
![]()
添加對表達式的一個監(jiān)視
查看當(dāng)前表達式的值可以使用p命令,格式為p expr,查看$val==1的當(dāng)前表達式值命令為:p $val==1,如下圖所示:
當(dāng)前表達式值為1,即true
刪除監(jiān)視可使用W(大寫字母)命令,格式為:W expr|*,可以刪除指定的表達式或者使用通配符*刪除所有的監(jiān)視值,如下圖所示:
刪除對表達式$val==1的監(jiān)視
步入執(zhí)行(Step Into)
步入執(zhí)行即單步調(diào)試中,碰到子過程會進入子過程中執(zhí)行,命令為s,如下圖所示:

步入執(zhí)行,進入到SetInitValue子過程中
步出執(zhí)行(Step Out)
步出執(zhí)行及單步調(diào)試中,遇到調(diào)用其他子過程的時候,不會進入子過程中,而是直接執(zhí)行該子過程的其余行,然后將控制權(quán)返回給子過程調(diào)用者。示例程序在SetInitValue子過程中調(diào)用了AddRet子過程,通過下圖可以看出其中的區(qū)別:
示例程序部分代碼
調(diào)試程序到SetInitValue子過程調(diào)用AddRet子過程處
使用s命令會步入到AddRet子過程中
使用n命令直接執(zhí)行完AddRet后返回
跳出執(zhí)行(Return from subroutine)
這個命令其實比較有用,在簡單的程序中或許感覺不出來。但是當(dāng)你調(diào)試一個大型的perl程序的時候,你會發(fā)現(xiàn)你所調(diào)試的程序往往引用了很多的其他自定義的或者第三方模塊,并且調(diào)試的程序可能會頻繁的進入這些模塊代碼中,為了節(jié)省時間與方便,我們更多會選擇跳出命令選項直接從這個模塊或者當(dāng)期陷入的子過程中跳出。
其命令為r,我們在上述例子中s命令跳入AddRet子過程的基礎(chǔ)上,使用r命令返回,如下圖所示:
使用r命令從AddRet子過程直接跳出
退出調(diào)試
退出調(diào)試使用命令q,如下圖所示:




