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


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