iis|指令碼
調試 ASP 指令碼
無論是否有經驗,您都可能會遇到程式錯誤,或叫“bug”,這將影響伺服器端指令碼正常工作。因此,對於開發成功和強大的 ASP 應用程式,特別是當應用程式變得越來越複雜時,調試(即發現和改正指令碼錯誤的過程)就顯得極其重要了。
Microsoft 指令碼偵錯工具工具
Microsoft 指令碼偵錯工具工具是一個強大的調試工具,可以協助您快速定位錯誤並可以互動式地測試伺服器端指令碼。使用指令碼偵錯工具,也可以與 Windows Internet Explorer 3.0 或更高版本一起使用,您可以:
- 每次運行一行伺服器端指令碼。
- 在執行伺服器端指令碼期間,開啟命令視窗以監視變數、屬性或數組元素的值。
- 在指令碼的指定行,(使用偵錯工具或指令碼命令)設定斷點以暫停執行伺服器端指令碼。
- 運行伺服器端指令碼時跟蹤過程。
注意 可以使用偵錯工具查看指令碼和定位錯誤,但不能直接編輯指令碼。要改正錯誤,必須使用編輯程式來編輯指令碼,儲存更改,然後再次運行該指令碼。
啟用調試
在開始調試伺服器端指令碼之前,首先必須將 Web 服務器配置為支援 ASP 調試。有關說明和資訊,請參閱啟用 ASP 調試。
啟用 Web 服務器調試後,您可以使用下面任意一種方法調試指令碼:
- 手工開啟指令碼偵錯工具以調試 ASP 伺服器端指令碼。
- 使用 Internet Explorer 請求 .asp 檔案。如果檔案包含錯誤或故意用來中斷執行的語句,指令碼偵錯工具將自動啟動,顯示指令碼並標出錯誤的來源。
指令碼錯誤
調試伺服器端指令碼的過程中,可能遇見幾種類型的錯誤。有些錯誤可能導致指令碼執行錯誤、中斷程式的執行或返回錯誤的結果。
語法錯誤
“文法”錯誤是一種經常遇到的錯誤,它是由錯誤的指令碼文法引起的。例如,命令拼字錯誤或傳遞給函數的參數值錯誤都可能產生錯誤。語法錯誤可以阻止指令碼運行。
執行階段錯誤
“運行時”錯誤發生在指令碼開始執行之後,它是由試圖執行不可能的操作的指令碼指令所引起的。例如,下面的指令碼包含一個函數,該函數以 0 作為變數的除數(非法數學操作),產生執行階段錯誤:
<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>Result = Findanswer(15)Document.Write ("結果是 " &Result)Function Findanswer(x)'這條語句產生執行階段錯誤。Findanswer = x/0End Function</SCRIPT>
執行階段錯誤必須改正,指令碼才會不中斷地執行。
邏輯錯誤
邏輯錯誤是最難以發現的錯誤。邏輯錯誤是由鍵入錯誤或程式邏輯上的缺陷引起的,指令碼運行沒問題,但產生的結果不正確。例如,如果伺服器端指令碼將對列表中的值進行排序,但在指令碼中本該使用 < 符號(小於符號)的地方錯誤地使用了 > 符號(大於符號),將導致排序結果不正確。
錯誤調試技術
您可以使用幾種不同的調試技術定位錯誤源並測試應用程式。
即時(JIT)調試
當執行階段錯誤中斷了伺服器端指令碼執行時,Microsoft 指令碼偵錯工具自動啟動,顯示 .asp 檔案,將語句指標指嚮導致錯誤的行,並建置錯誤訊息。使用這種類型的調試,也叫“Just-in-Time 偵錯”,電腦將暫停進一步執行程式。必須使用編輯程式改正錯誤並儲存所作更改,然後才能繼續運行指令碼。
斷點調試
當發生錯誤但無法輕鬆地找到錯誤源的時候,預先設定“斷點”有時會很有用。斷點在指定的指令碼行暫停執行指令碼。可以在可疑的行前面設定一個或多個不同的斷點,然後使用偵錯工具檢查指令碼中設定的變數或屬性的值。改正錯誤後,可以清除斷點,這樣指令碼就可以不間斷地運行了。
要設定斷點,使用指令碼偵錯工具開啟指令碼,選擇指令碼中想要中斷執行的行,然後從“調試”菜單中選擇“切換斷點”。然後使用 網頁瀏覽器重新請求指令碼。執行到設定了斷點的指令碼行後,電腦啟動指令碼偵錯工具,顯示指令碼,並且語句指標指向設定了斷點的行。
在下一條語句中斷
在某些情況下,如果下一條語句不是運行在您所工作的 .asp 檔案中,您可能想要啟用指令碼偵錯工具的“在下一條語句中斷”。例如,如果對駐留在名為 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”語句從產生的 .asp 檔案中刪除。
JScript 的 Debugger 語句調試
要添加斷點到用 VBScript 編寫的伺服器端指令碼中,請在指令碼的可疑行之前插入“debugger”語句。例如,下面的指令碼中包含“debugger”語句,它用來中斷執行,並在每次指令碼迴圈通過一個新值時自動啟動指令碼偵錯工具。
<%@ LANGUAGE=JScript %><%for (var count = 1; count <= 10; count++) {var eventest = count%2//設定斷點,使使用者可以逐步執行指令碼。debuggerif (eventest == 0)Response.Write("Even value is " + count + "<br>") }%>
必須將“debugger”語句從產生的 .asp 檔案中刪除。
注意 不要將“debugger”語句與 JScript 的“break”語句混淆。“break”語句用於退出執行期間當前正在啟動並執行迴圈,並不啟用 Microsoft 指令碼偵錯工具,也不暫停執行。
調試指令碼的技巧
除了指令碼偵錯工具,一套優秀的調試技巧可以大大減少花費在研究指令碼錯誤源上的時間。雖然大多數錯誤有明顯的來源,如命令拼字錯誤或缺少變數,但還有某些類型的邏輯和執行錯誤很難發現。
關於 Microsoft 指令碼偵錯工具的詳細資料,請參閱位於 http://msdn.microsoft.com/scripting/ 的 Microsoft 指令碼技術網站。
© 1997-1999 Microsoft Corporation。著作權所有,並保留一切權利。