直播中
7.5.2 Microsoft Script Debugger
當開發(fā)更復(fù)雜的處理實際任務(wù)的應(yīng)用程序時,經(jīng)常需要一個更加強大的工具來進行調(diào)試。Microsoft Script Debugger(微軟腳本調(diào)試器)是一種允許調(diào)試運行在客戶機和服務(wù)器上的腳本的調(diào)試工具。它能用于任何啟用ActiveX的腳本語言(包括VBScript和JScript)編寫的程序,也能夠用來調(diào)試對Java applet、Java Bean和ActiveX組件的調(diào)用。
在研究這個工具之前,先簡要說明一些問題。如前所述,ASP應(yīng)用程序由兩種腳本組成,一種是客戶端腳本,一種是服務(wù)器端腳本??蛻舳四_本通常由VBScript或JScript腳本語句組成,當其到達客戶端時出現(xiàn)在HTML頁面中并在此執(zhí)行,可能是在載入文檔時或是在對一些事件的響應(yīng)中。服務(wù)器端腳本通常也由VBScript或JScript語句組成。當瀏覽器請示網(wǎng)頁時,服務(wù)器端腳本由IIS執(zhí)行。在下面的討論中,將討論服務(wù)器端腳本調(diào)試的方法。然而所討論的許多技術(shù)也可用于客戶端腳本調(diào)試。
1. 服務(wù)器端的調(diào)試
為了調(diào)試服務(wù)器端腳本,在運行IIS的計算機上運行腳本調(diào)試器,然而在使用腳本調(diào)試器之前,必須啟用調(diào)試。為了使性能最優(yōu)化,基于ASP的應(yīng)用程序在缺省情況下關(guān)閉了調(diào)試功能。
注意,不要對生產(chǎn)性的應(yīng)用程序(即處于活動狀態(tài)的并被他人使用的公用網(wǎng)站)打開調(diào)試功能。這樣會減慢整個應(yīng)用程序的運行,并且錯誤能使網(wǎng)頁出現(xiàn)不確定的停止運行情況。
調(diào)試僅能為虛擬應(yīng)用程序和整個Web網(wǎng)站進行設(shè)置,為了啟用調(diào)試,打開應(yīng)用程序或站點的Properties對話框,在Home Directory選項卡中,點擊Configuration按鈕,在Application Configuration對話框的App Debugging選項卡中,選擇Enable ASP server-side script debugger,如圖7-22所示。下面準備調(diào)試我們的應(yīng)用程序。
圖7-22 啟用調(diào)試的屏幕
注意Application Configuration對話框包含一個復(fù)選框,能夠啟用客戶端腳本調(diào)試。這一點在IIS 5.0中沒有實現(xiàn),在文檔中僅標記為“reserved for future use”。如果通常的500-100.asp定制錯誤頁面不可用,Script Error messages部分中包含將文本。
(1) 處理服務(wù)器腳本
不像客戶端腳本,基于ASP應(yīng)用程序腳本不是事件驅(qū)動的。當客戶端要求一個來自服務(wù)器的網(wǎng)頁時,服務(wù)器讀取網(wǎng)頁內(nèi)容,并處理所有的服務(wù)器腳本(即在<%...%>和<SCRIPT RUNAT="SERVER"></SCRIPT>段中的所有內(nèi)容),也包括在HTML文本中的“行內(nèi)”腳本段內(nèi)容,例如:
The valve of the result is: <% = strResult %>
處理流程顯示在圖7-23所示的框圖中:
圖7-23 服務(wù)器腳本運行流程圖
當IIS載入網(wǎng)頁時將處理ASP頁面中的所有腳本,在任何輸出送給客戶端之前,ASP及腳本引擎能夠捕獲語法和運行期錯誤(除非你關(guān)閉緩沖或調(diào)用Response.Flush方法)。
(2) 腳本調(diào)試器提供的幫助
啟用腳本調(diào)試時,如果出現(xiàn)錯誤,在服務(wù)器屏幕上可以看到一個描述ASP代碼錯誤的對話框,點擊OK,然后調(diào)入當前ASP網(wǎng)頁的一個只讀拷貝,打開的腳本調(diào)試器,錯誤出現(xiàn)的行由箭頭指示,如圖7-24所示:
圖7-24 腳本調(diào)試器
這里,錯誤的產(chǎn)生是由于出現(xiàn)了Page Counter對象方法的名字錯誤,應(yīng)是PageHit而不是DoPageHit。同時,腳本調(diào)試器找到了錯誤并且終止了頁面的運行,工具條上的按鈕用于程序的繼續(xù)運行、單步程序運行或者終止頁面的處理。
工具條最右邊的按鈕打開腳本調(diào)試器中的Immediate窗口,可以用它和頁面進行交互,并且很可能找到出錯的地方。例如,可以查詢或者設(shè)置變量值或組件屬性,可以執(zhí)行內(nèi)部函數(shù)和子程序、自定義函數(shù)和子程序以及已經(jīng)創(chuàng)建的對象方法等。在圖中,調(diào)用了Page Counter組件的PageHit方法,然后查詢Hits屬性以得到正在運行的腳本中該處的值。
為了了解為什么在“公共”網(wǎng)站上不應(yīng)使用腳本調(diào)試器,可以從客戶機上打開一個包含服務(wù)器端錯誤的頁面。在這種情況下,錯誤信息對話框出現(xiàn)在服務(wù)器上,腳本調(diào)試器也在服務(wù)器上打開。在客戶機上,直到運行在服務(wù)器上的腳本調(diào)試器關(guān)閉,才開始載入該頁面。
(3) 啟動和使用調(diào)試器
啟用腳本調(diào)試后,虛擬應(yīng)用程序的網(wǎng)頁中出現(xiàn)錯誤時,腳本調(diào)試器自動啟動。還可以人工啟動腳本調(diào)試器,在Windows 2000的Start菜單(Programs|Accessories|Microsoft Script Debugger)中完成。相應(yīng)地,也可在想打開腳本調(diào)試器的地方把一個Stop語句插入ASP程序中,當運行至Stop語句時,IIS會終止ASP程序的執(zhí)行,啟動腳本調(diào)試器,顯示當前頁面并指出含有Stop語句的當前行。
腳本調(diào)試器能完成下列工作:
· 查看正在或已經(jīng)運行的文檔的列表,并從中選擇一個進行查看或編輯。
· 在打開的網(wǎng)頁中設(shè)置一個新斷點,頁面在該點停止運行以便進行調(diào)試。
· 單步調(diào)試,一步運行一條語句,可選地執(zhí)行子程序和函數(shù)。
· 查看調(diào)用棧(Call Stack),顯示程序中在該點被調(diào)用的嵌套子程序或函數(shù)。
1. 腳本調(diào)試器的技巧和竅門
下面是使用Microsoft Script Debugger時,有助于找到腳本中錯誤的一些竅門。
· 如果調(diào)試服務(wù)器端腳本,為ASP應(yīng)用程序啟用腳本調(diào)試器。否則,錯誤信息將作為文本傳送給客戶端的瀏覽器,并且不能對服務(wù)器端腳本使用腳本調(diào)試器。
· 調(diào)試完成后,關(guān)閉調(diào)試功能,否則會降低服務(wù)器性能,并且錯誤的頁面會停留在客戶端。
· 對于一個或更多的ASP應(yīng)用程序,如果啟用腳本調(diào)試器,將傳送給它所有的服務(wù)器錯誤,包括那些遠程客戶訪問網(wǎng)頁時出現(xiàn)的錯誤。因此,除非能在自己的服務(wù)器上調(diào)試,否則不要啟用腳本調(diào)試器。
· 如果在一個沒有安裝在服務(wù)器上的瀏覽器中工作,并且在網(wǎng)頁中顯示錯誤,則錯誤在服務(wù)器端腳本中。如果一個錯誤信息出現(xiàn)在對話框中,則錯誤在客戶端腳本中。
· 如果在.asp文件中有一個語法或運行期錯誤,并且已經(jīng)對這個ASP應(yīng)用程序啟用調(diào)試功能,客戶端瀏覽器將不顯示語法錯誤(除非瀏覽器運行在服務(wù)器上),僅顯示超時或不能打開網(wǎng)頁。
· 在表明服務(wù)器端腳本中是否有錯誤的消息中,顯示的行號指的是包含這個錯誤的.asp文件的相應(yīng)行。
· 如果在由.asp文件創(chuàng)建的客戶端腳本中有錯誤,行號并不指向.asp文件的錯誤行,而是指向錯誤出現(xiàn)的.asp文件的HTML輸出行。為了查看這行,應(yīng)在客戶瀏覽器中查看HTML文件的源程序。
· VBScript和JScript錯誤代碼在附錄D中。
7.5.3 獲得ASP的幫助和支持
如果遇到一個不能處理的錯誤,或者看來像ASP中的一個“bug”的事情,最好能夠?qū)で髱椭越鉀Q這個問題。關(guān)于ASP在Web上有許多有用的信息源,第1 章后面我們列舉了許多。但是,對一些特殊問題,確實需要一些更直接的幫助。
在計算機上安裝的ASP和IIS文檔是一個好起點,并且能通過瀏覽器的URL為http://yourservername/iishelp/進行訪問。運行Windows 2000的附加組件設(shè)置或主設(shè)置程序(依賴于安裝的Windows 2000版本)時,應(yīng)保證安裝了全部的文檔。
也可以從“Microsoft for Windows 2000”得到的完整平臺SDK,其中包含了大量關(guān)于Windows和Windows 2000中Internet服務(wù)的附加信息。它包含完整的VBScript和JScript參考。它可以從微軟獲得,并提供給MSDN成員。腳本參考文檔可單獨獲得,也可以從“http://www.microsoft.com/scripting/”網(wǎng)站下載。也可從這里獲得腳本調(diào)試器。
微軟開發(fā)者網(wǎng)絡(luò)(The Microsoft Developer's Network,MSDN)Web站點也提供了許多支持和幫助,即使這部分信息有時難以找到。還可以從Workshop網(wǎng)站(http://msdn.microsoft.com/workshop/)開始,這個網(wǎng)站在左邊導(dǎo)航欄中有很好的索引和一系列標題。
另外,位于http://msdn.microsoft.com/Library/default.htm的主MSDN庫包含有文章、基礎(chǔ)知識、FAQ和其他用于IIS和ASP的支持材料,左邊窗口使用一個Java擴展列表控件,使用戶很容易進行查找。
如果需要特別的幫助,或者需要向其他開發(fā)者提出一些問題,在msnews.microsoft.com網(wǎng)站上有一些有用的新聞組。還可以訂閱microsoft.public.inetserver.iis、microsoft.public.inetserver.activeserverpages和microsoft.public.inetserver.iis.misc。一些ASP網(wǎng)站也提供有關(guān)ASP方面的討論話題、論壇或聊天室。
7.6 小結(jié)
本章討論的內(nèi)容是大多數(shù)編程者最不喜愛的工作。即使最簡單的腳本,也不可能就能第一次正確地工作。隨著ASP提供越來越多的特性,在腳本中出現(xiàn)錯誤的機會也增加了。了解如何發(fā)現(xiàn)并處理錯誤的相關(guān)基本知識,是非常必要的。
通過分析可能出現(xiàn)的不同種類的錯誤,弄清楚缺省的ASP和腳本引擎錯誤處理系統(tǒng)捕獲錯誤的機理,防止把錯誤和無效數(shù)據(jù)傳給其他的應(yīng)用程序。編程時出現(xiàn)的錯誤越少,越容易發(fā)現(xiàn)和解決它們。
然而,好的編程習(xí)慣并不能阻止某些種類的錯誤發(fā)生,例如那些由外部資源和服務(wù)造成的錯誤。這意味著提供自己的定制錯誤處理代碼,在出現(xiàn)錯誤時知道如何跟蹤錯誤并進行妥善處理,是非常重要的。
最后,以對Microsoft Script Debugger的闡述結(jié)束了本章,它是有助于找到和解決網(wǎng)頁中的運行期錯誤的一個有用的工具。它可以暫停程序執(zhí)行和進行單步執(zhí)行,同時還能夠觀察程序在進行什么,甚至能夠和腳本進行交互。