台灣最大程式設計社群網站
線上人數
2123
 
會員總數:246224
討論主題:189786
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> ASP 指令的偵錯
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ASP 指令的偵錯
價值 : 0 QP  點閱數:3237 回應數:0
樓主

站務人員 站長
門外漢
0 1580
542 9
發送站內信

捐贈 VP 給 站務人員
無論您的程度到哪裡,您寫的程式時或多或少都會有錯誤,也就是所謂的臭蟲,使得伺服器端的指令無法正常執行。因此,尋找指令中的錯誤並加以更正,也就是俗稱的「偵錯」(debug) 動作,對於開發成功及穩固的 ASP 軟體而言非常重要,當程式的複雜度愈來愈高時,偵錯更是不可或缺的要素。

Microsoft Script Debugger 工具
Microsoft Script Debugger 是一個功能強大的偵錯工具,可與 3.0 版以上 (含 3.0 版) 的 Windows Internet Explorer 搭配,幫助我們找出程式中的錯誤,並以互動的方式測試伺服器端的指令。Script Debugger 的功能包括:

一次執行一行伺服器端指令。
開啟指令視窗,監視伺服器端指令執行時各項變數、屬性或陣列參數的值。
利用此偵錯工具或在程式中加上特殊的指令設定中斷點,讓伺服器端程式執行到指令的某一行時便停下來。
在伺服器端指令執行時同步追蹤各個程序。
注意事項 偵錯工具可以檢視指令以及找出錯誤,但不能直接修改指令。 要修正程式中的錯誤,請用編輯軟體來編輯您的指令並存檔,然後再重新執行指令。

啟用偵錯功能
開始對伺服器端指令偵錯前,應該先將 Web 伺服器設定成支援 ASP 偵錯功能。 若需相關的指示與資訊,請參閱啟用 ASP 偵錯功能。

Web 伺服器的偵錯功能啟用之後,就可以利用以下任何一種方法開始對指令進行偵錯:

手動開啟 Script Debugger,對 ASP 伺服器端指令偵錯。
使用 Internet Explorer 要求一個 .asp 檔案。 如果這個檔案中有錯誤,或者您在其中故意放了一個停止執行的陳述式,Script Debugger 便會自動啟動將此指令顯示出來,並指出錯誤的地方。
指令錯誤
對伺服器端指令進行偵錯時,可能會碰到好幾種錯誤。其中有些錯誤會使得指令的執行不正確或導致指令停止執行,有的則會導致程式傳回錯誤的結果。

語法錯誤
語法錯誤是最常見的一種錯誤,這是由於指令某部分的語法不合乎規定所導致的。例如指令拼錯或傳給函數的引數個數不對,都會產生錯誤。 語法錯誤會使得指令無法執行。

執行時期錯誤
執行時期錯誤指的是指令開始執行之後,由於指令做了一些不正確的動作而導致的錯誤。例如以下這個指令中就有一個函數用 0 當作除數 (在數學上來講,0 是不可以當作除數的),因此會產生執行時期錯誤:

<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
Result = Findanswer(15)
Document.Write ("The answer is " &Result)

Function Findanswer(x)
'以下這個陳述式會導致執行時期錯誤。
Findanswer = x/0
End Function
</SCRIPT>
導致執行時期錯誤的臭蟲一定要抓出來並加以更正,指令才能正確無誤地順利執行。

邏輯錯誤
邏輯錯誤是最難偵測出來的一種錯誤。其原因可能是打錯字或程式的邏輯上有瑕疵,以致於指令雖然可以從頭到尾順利執行完畢,但得到的結果卻是不正確的。例如原本要將一連串數字依大小順序排序的伺服器端指令,很可能就因為在比較數值的地方把應該用的小於 (<) 符號不小心寫成大於 (>),於是程式執行完排出來的順序當然就不正確了。

偵錯技巧
以下幾種偵錯技巧,都可以幫助我們測試應用程式找出錯誤的地方。

即時 (JIT) 偵錯
當伺服器端指令遇到執行時期錯誤而導致不能繼續執行時,Microsoft Script Debugger 便會自動啟動,將此 .asp 檔顯示出來,並在其中標出導致錯誤的敘述,同時顯示錯誤訊息。此種偵錯方式稱為即時 (Just-In-Time, JIT) 偵錯,可讓電腦暫停程式的執行。您必須用編輯軟體將錯誤更正並存檔,然後才能繼續執行指令。

中斷點偵錯
當程式有錯誤產生但又不容易找出真正導致錯誤的地方時,可以嘗試利用設定中斷點的方式進行偵錯。中斷點可使得指令執行到您指定的敘述時便暫停執行。您可以在您懷疑的敘述之前設定一個或多個中斷點,然後用偵錯程式檢查指令中各項變數或屬性的值是否正確。等找出錯誤並加以更正之後,再將中斷點清除,就可以讓指令順利執行了。

設定中斷點的方法如下:用 Script Debugger 開啟指令,選取要中斷執行的敘述,然後選擇 [偵錯] 功能表中的 [切換中斷點]。接著用 Web 瀏覽器再次要求此指令。當指令執行到您設定中斷點的這行敘述時,電腦就會啟動 Script Debugger 顯示此指令,並把設定中斷點的陳述式標示出來。

在下一個陳述式中斷
在某些狀況下,如果下一個要執行的陳述式不在您的 .asp 檔案內時,您可能會想要啟用 Script Debugger 的 [在下一個陳述式中斷] 功能。假設 Sales 這個程式內有一個 .asp 檔案,而且我們在這個檔案內設定 [在下一個陳述式中斷],則當我們執行 Sales 中任何一個檔案內的指令,或任何一個已經啟用偵錯的應用程式時,偵錯程式便會自動啟動。因此當您設定 [在下一個陳述式中斷] 時,應當注意不管接下來執行的是哪一個指令陳述式,只要一執行下去,偵錯程式都會自動啟動。

利用 VBScript 的 Stop 陳述式來偵錯
如果您的伺服器端指令是用 VBScript 設計的,那麼您還可以在程式中懷疑有問題的地方之前,加上 Stop 陳述式來設定中斷點。例如以下這個伺服器端指令就含有一個 Stop 陳述式,使得此程式在即將呼叫另一個自訂的函數之前暫停執行:

<%
intDay = Day(Now())
lngAccount = Request.Form("AccountNumber")
dtmExpires = Request.Form("ExpirationDate")

strCustomerID = "RETAIL" & intDay & lngAccount & dtmExpires

'把中斷點設定在這裡。
Stop

'呼叫註冊元件。
RegisterUser(strCustomerID)
%>
當您要求這個指令時,偵錯程式便會啟動,並自動將這個 .asp 檔案顯示出來,在其中標示出 Stop 陳述式的位置。 在程式把變數傳給該元件之前,您有機會仔細檢查這些變數的值。

重要 寫好的程式要上線之前,請務必記得把其中的所有 Stop 陳述全部拿掉。

利用 JScript 的 Debugger 陳述式來偵錯
如果您的伺服器端指令是用 JScript 撰寫的,可以在程式中您懷疑的地方之前加上 debugger 陳述式。例如以下這個指令中就含有一個 debugger 陳述式,當迴圈每次用新的值執行到這個地方時,程式便會暫停,並自動啟動 Script Debugger。

<%@ LANGUAGE=JScript %>
<%
for (var count = 1; count <= 10; count++)
{
var eventest = count%2
//在此處設定中斷點,讓使用者一步一步執行指令。
debugger
if (eventest == 0)
Response.Write("Even value is " + count + "
")
}
%>
當您設計的 .asp 檔案要上線時,請務必記得把程式中的所有 debugger 陳述拿掉。

注意事項 請勿將 debugger 陳述式與 JScript 的 break 陳述式混淆。break 陳述式的目的是從正在執行的迴圈中跳出來,並不會啟動 Microsoft Script Debugger,也不會導致程式暫停執行。

指令偵錯秘訣
除了 Script Debugger 之外,其他還有一些偵錯時常運用的秘訣,可以大幅降低您調查指令錯誤時所花費的時間。雖然大部分的錯誤都是很明顯一眼就可以認出來的,但還是有一些很難找出來的錯誤,例如拼錯指令或變數、某些類型的邏輯錯誤與執行錯誤等等。


若需有關 Microsoft Script Debugger 的其他資訊,請參閱 Microsoft Scripting Technologies 網站 http://msdn.microsoft.com/scripting/。


--------------------------------------------------------------------------------

(C) 1997-1999 Microsoft Corporation. All rights reserved.

本篇文章發表於2001-01-15 00:00
目前尚無任何回覆
   

回覆
如要回應,請先登入.