Linux中腳本執(zhí)行遇到錯(cuò)誤時(shí),一般都會(huì)打印錯(cuò)誤及錯(cuò)誤所在的行號(hào)。有的錯(cuò)誤提示能望文知義,有的描述不是能夠知其所以然,還有的錯(cuò)誤是前面的過(guò)程導(dǎo)致了錯(cuò)誤的發(fā)生。如何能快速發(fā)現(xiàn)代碼中的錯(cuò)誤?Linux中腳本調(diào)試并沒(méi)有特定的工具,在windows平臺(tái)上可以借助visual studio來(lái)調(diào)試vbscript腳本,也希望不久以后linux中也有類似的腳本調(diào)試工具。如果已經(jīng)有了,希望能告訴我。下面總結(jié)一下我常用到的調(diào)試方法。
1:打印程序日志的方法,這種方法在各種語(yǔ)言的程序中都被廣為應(yīng)用。我們可以用print 和 echo等輸出語(yǔ)句。如果希望調(diào)試日志在運(yùn)行不出現(xiàn),可以寫(xiě)個(gè)類似的函數(shù)。
debug_info()
{
if [ "$DEBUG" = "true" ]
then
$@
fi
}
2:在調(diào)用shell腳本是加上命令行選項(xiàng)或者是利用set命令。
比如在 sh -n 腳本文件名 或者 set -o noexec 縮寫(xiě)是set -n 表示只檢查語(yǔ)法不執(zhí)行。
sh -v 腳本文件名 或者 set -o verbose 縮寫(xiě)是set -n 表示在命令執(zhí)行前顯示。
sh -x 腳本文件名 或者 set -o xtrace 縮寫(xiě)是set -x 表示在命令執(zhí)行后顯示。
sh -u 腳本文件名 或者 set -o nounset 縮寫(xiě)是set -u 如果出現(xiàn)了未定義的變量就給出錯(cuò)誤消息。
3:使用用trap命令來(lái)執(zhí)行錯(cuò)誤和調(diào)試信號(hào)的輸出
trap [命令,函數(shù),語(yǔ)句] 信號(hào)[ERR,DEBUG...]
例如:
ERRPRINT()


{
echo "LINE:$1 command of function exit with $?"
}
trap 'ERRPRINT $LNENO' ERR
abc
good