?? page12.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>調(diào)試 ASP 腳本</title>
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="Microsoft Border" content="none">
</head>
<body background="../../images/exptextb.jpg">
<!-- Spidersoft WebZIP Ad Banner Insert -->
<!-- End of Spidersoft WebZIP Ad Banner Insert-->
<p><font FACE="宋體" size="3"><strong>調(diào)試 ASP 腳本</strong></font></p>
<p><font FACE="宋體" SIZE="2">無論您的計劃多么精密、經(jīng)驗多么豐富,腳本錯誤(bug)可能在最初就使您的
ASP
服務器端的腳本無法正確運行。也就是說調(diào)試,即查找和糾正腳本錯誤,對開發(fā)一個成功的和強健的
ASP 程序是非常重要的。</p>
<p><strong>Microsoft 腳本調(diào)試工具</strong></p>
<p>Microsoft? Script Debugger
是一個功能強大的調(diào)試工具,它能幫助您迅速查找錯誤并對服務器端的腳本進行交互測試。Script
Debugger 與 Windows Internet Explorer 3.0
版本或更新的版本一起工作。通過它,您可以:</p>
<p>逐行運行服務器端腳本。 </p>
<p>在服務器端腳本執(zhí)行時,打開命令窗口監(jiān)視變量、屬性或數(shù)組元素的值。
</p>
<p>在特定行設(shè)置暫停標記,掛起服務器端腳本(使用調(diào)試工具或腳本命令)。
</p>
<p>在運行服務器端腳本時跟蹤過程。 </p>
<p>注意
您可以使用調(diào)試工具查看腳本并找到錯誤所在,但是不能直接編輯腳本。要想改正錯誤,必須用編輯器編輯腳本然后保存,再運行腳本。</p>
<p>詳細信息,請參閱 Microsoft 腳本調(diào)試程序.</p>
<p>(該功能不能用于 Windows 95 或更高的版本。)</p>
<p><strong>啟用調(diào)試</strong></p>
<p>在開始調(diào)試服務器端腳本之前,您必須首先配置 Web
服務器,使其支持 ASP 調(diào)試。有關(guān)配置命令及信息,請參閱 啟用 ASP
調(diào)試。</p>
<p>在啟用 Web
服務器調(diào)試之后,就可以使用下面的任一方法調(diào)試腳本:</p>
<p>手工打開 Microsoft 腳本調(diào)試器,調(diào)試 ASP 服務器端腳本。 </p>
<p>使用 Internet Explorer 請求 .asp
文件。如果該文件包含錯誤或人為添加的停止執(zhí)行語句,那么
Microsoft
腳本調(diào)試程序?qū)⒆詣訂樱@示該腳本,并且指出錯誤來源。 </p>
<p>腳本錯誤</p>
<p>調(diào)試服務器端腳本時,您可能會碰到各種類型的錯誤。其中的某些錯誤使腳本無法正確執(zhí)行、程序停止執(zhí)行或返回錯誤結(jié)果。</p>
<p><strong>語法錯誤</strong></p>
<p>語法錯誤是經(jīng)常碰到的錯誤,它是由不正確的腳本語法導致的。例如,命令拼寫錯誤或傳遞給函數(shù)的參數(shù)不正確都將產(chǎn)生錯誤。語法錯誤可能導致您的腳本不能運行。</p>
<p><strong>運行時錯誤</strong></p>
<p>運行時錯誤是腳本在執(zhí)行過程中腳本指令試圖執(zhí)行不可能的動作而導致的。例如,下面的腳本中包含一個被零除(一種非法的數(shù)學運算)的函數(shù),將產(chǎn)生運行時錯誤:</p>
<p><script language = "VBScript" runat = server></p>
<p>Result = Findanswer(15)</p>
<p>document.write ("The answer is " &Result)</p>
<p>Function Findanswer(x) </p>
<p>'This statement generates a run-time error.</p>
<p>Findanswer = x/0 </p>
<p>End Function</p>
<p></script></p>
<p>必須糾正導致運行時錯誤的錯誤,這樣才能使腳本在運行時不被中斷。</p>
<p><strong>邏輯錯誤</strong></p>
<p>邏輯錯誤通常可能是潛在和難以檢測的。如果有因鍵入錯誤或程序邏輯流程錯誤引起的邏輯錯誤,腳本可能會成功運行,但產(chǎn)生的結(jié)果卻是錯的。例如,一服務器端腳本計劃對一個值列表排序,如果本應使用
“<” 符號比較數(shù)值,但卻使用了“ >”
符號,那么將返回不正確的排序結(jié)果。</p>
<p><strong>錯誤調(diào)試技術(shù)</strong></p>
<p>可以使用多種不同的調(diào)試技術(shù)來查找錯誤的根源并測試應用程序。</p>
<p><strong>實時 (Just-In-Time, JIT) 調(diào)試</strong></p>
<p>當一個運行時錯誤中斷了 ASP 腳本的執(zhí)行時,Microsoft
腳本調(diào)試程序自動啟動,顯示 .asp
文件,將語句指針指向?qū)е洛e誤的行,并產(chǎn)生錯誤消息。這種調(diào)試方式稱為實時
(JIT)
調(diào)試,計算機將暫停程序的執(zhí)行。必須用編輯程序糾正這些錯誤,保存所做的修正,然后再運行腳本。</p>
<p><strong>斷點調(diào)試</strong></p>
<p>當一個錯誤發(fā)生并且很難找到錯誤的根源時,可使用預設(shè)斷點的調(diào)試方法。斷點將腳本暫停在特定一行。可以在腳本中有疑問處設(shè)置一個或多個不同的斷點,然后使用調(diào)試器去改正腳本中設(shè)置的變量或?qū)傩缘闹怠.斈m正這些錯誤之后,可以清除斷點以便您的腳本能不間斷地運行。</p>
<p>請用 Microsoft 腳本調(diào)試程序打開腳本,設(shè)置斷點。然后用 Web
瀏覽器請求此腳本。當執(zhí)行到腳本中含有斷點的行時,計算機啟動腳本調(diào)試程序,并且語句指針會指在設(shè)置了斷點的行上。</p>
<p><strong>VBScript Stop 語句調(diào)試器</strong></p>
<p>通過在服務器端腳本中有問題的部分前面插入 Stop
語句,您也可以將斷點添加到用 VBScript
編寫的服務器端腳本中。例如,下面的 ASP 腳本包含一個 Stop
語句,用來在顯示結(jié)果之前暫停執(zhí)行:</p>
<p><% </p>
<p>dayvalue = 3</p>
<p>TheDay = WeekDayName(dayvalue)</p>
<p>Stop 'set breakpoint here.</p>
<p>Response.Write("Today is " + TheDay)</p>
<p>%></p>
<p>當您在請求 Web
瀏覽器使用的先前的腳本時,調(diào)試程序啟動并自動顯示 .asp
文件,而且語句指針會指示 stop
語句的位置。一定要記住從交付使用的 .asp 文件中刪除 Stop 語句。</p>
<p><strong>用 JScript Debugger 語句調(diào)試</strong></p>
<p>要將斷點加到用 Microsoft? JScript
編寫的服務器端腳本中,可在有疑問的行前插入 debugger
語句。例如,下面的腳本包含了 debugger
語句,每次腳本循環(huán)到一個新值時,就會中斷執(zhí)行并自動啟動
Microsoft 腳本調(diào)試程序。</p>
<p><%@ Language="JScript" %></p>
<p><%</p>
<p>for (var count = 1; count <= 10; count++) { </p>
<p>var eventest = count%2; </p>
<p>debugger //Sets breakpoint </p>
<p>if (eventest == 0) {</p>
<p>response.write("Even value is " + count + "<br>")</p>
<p>}</p>
<p>}</p>
<p>%></p>
<p>請記住從交付使用的 .asp 文件中刪除 debugger 語句。</p>
<p>注意 不要混淆 debugger 語句和 JScript break 語句。在程序執(zhí)行期間,break
語句僅退出當前循環(huán),并不激活 Microsoft
腳本調(diào)試器,也不暫停程序的執(zhí)行。</p>
<p><strong>腳本調(diào)試技巧</strong></p>
<p>除腳本調(diào)試程序外,一套好的調(diào)試技巧也能減少花費在分析腳本錯誤根源上的大量時間。盡管大部分錯誤是由顯而易見的根源導致的,但命令拼寫錯誤或丟失變量、某種類型的邏輯和執(zhí)行錯誤也可能因不太明顯的根源所致。詳細信息,請參閱
Microsoft 腳本調(diào)試程序文檔的“調(diào)試技巧”部分。</p>
<p> </p>
<p>--------------------------------------------------------------------------------</p>
</font>
<p><font FACE="宋體" size="3"><strong>管理會話</strong></font></p>
<p><font FACE="宋體" SIZE="2">成功開發(fā) Web
應用程序的難題之一是在一次用戶訪問,即會話期間,當用戶在一個應用程序的頁與頁之間跳轉(zhuǎn)的同時,維護用戶信息。HTTP
是一種無狀態(tài)協(xié)議,也就是說,Web
服務器將某頁的每次訪問都當作相互無關(guān)的訪問來處理;服務器不保留前一次訪問的任何信息,即使訪問就發(fā)生在當前訪問的幾秒鐘之前。正因為這種不記憶以前訪問的特性使得編寫聯(lián)機目錄之類的應用程序很困難,此類應用程序可能需要跟蹤用戶在目錄的不同頁間跳轉(zhuǎn)的同時曾選擇過的目錄項。</p>
<p>ASP 提供了一個管理會話信息問題的獨特方案。使用 ASP Session
對象和由您的服務器生成的特殊用戶 ID,您可以創(chuàng)建一個智能應用程序,該應用程序可以識別每個來訪的用戶并收集應用程序跟蹤用戶的首選項或選擇內(nèi)容所要用到的信息。</p>
<p>ASP 通過 HTTP cookie 設(shè)置用戶 ID。HTTP cookie
是存儲在用戶瀏覽器上的小文件。因此,如果您正在為不支持 cookie
的瀏覽器創(chuàng)建應用程序,或者您的客戶將瀏覽器設(shè)置為不接受 cookie,請不要使用
ASP 的會話管理功能。</p>
<p>您也可以編寫在應用程序啟動或結(jié)束時運行的腳本。有關(guān)定義應用程序啟動事件或應用程序結(jié)束事件的信息,請參閱
Global.asa 參考。</p>
<p><strong>啟動和結(jié)束會話</strong></p>
<p>會話可以通過三種方式啟動:</p>
<p>一個新用戶請求訪問一個 URL,該 URL 標識了某個應用程序中的 .asp
文件,并且該應用程序的 Global.asa 文件包含 Session_OnStart 過程。 </p>
<p>用戶在 Session 對象中存儲了一個值。 </p>
<p>用戶請求了一個應用程序的 .asp 文件,并且該應用程序的 Global.asa
文件使用 <OBJECT>
標簽創(chuàng)建帶有會話作用域的對象的實例。有關(guān)使用 <OBJECT>
標簽創(chuàng)建帶有會話作用域的對象的實例的詳細信息,請參閱
使用組件。 </p>
<p>如果用戶在指定時間內(nèi)沒有請求或刷新應用程序中的任何頁,會話將自動結(jié)束。這段時間的默認值是
20 分鐘。可以通過在 Internet
服務管理器中設(shè)置“應用程序選項”屬性頁中的“會話超時”屬性改變應用程序的默認超時限制設(shè)置。應依據(jù)您的
Web
應用程序的要求和服務器的內(nèi)存空間來設(shè)置此值。例如,如果您希望瀏覽您的
Web
應用程序的用戶在每一頁僅停留幾分鐘,就應該縮短會話的默認超時值。過長的會話超時值將導致打開的會話過多而耗盡您的服務器的內(nèi)存資源。</p>
<p>對于一個特定的會話,如果您想設(shè)置一個小于默認超時值的超時值,可以設(shè)置
Session 對象的 Timeout 屬性。例如,下面這段腳本將超時值設(shè)置為 5
分鐘。</p>
<p><% Session.Timeout = 5 %> </p>
<p>您也可以設(shè)置一個大于默認設(shè)置的超時值,Session.Timeout
屬性決定超時值。</p>
<p>您也可以通過 Session 對象的 Abandon
方法顯式結(jié)束一個會話。例如,在表格中提供一個“退出”按鈕,將按鈕的
ACTION 參數(shù)設(shè)置為包含下列命令的 .asp 文件的 URL 。 </p>
<p><% Session.Abandon %> </p>
<p><strong>關(guān)于 SessionID 和 Cookie</strong></p>
<p>當用戶第一次請求給定的應用程序中的 .asp 文件時,ASP 生成一個
SessionID。 SessionID
是由一個復雜算法生成的號碼,它唯一標識每個用戶會話。在新會話開始時,服務器將
Session ID 作為一個 cookie 存儲在用戶的 Web 瀏覽器中。</p>
<p>SessionID 與鑰匙很相似,當會話期間用戶與應用程序交互時,ASP
可以將用戶信息存儲在服務器的一個“保險箱”中。正象用鑰匙能存取保險箱中物品一樣,通過在
HTTP 請求標題中發(fā)送的用戶 SessionID cookie,就能夠?qū)υ摗氨kU箱”中的內(nèi)容進行訪問。每當
ASP 收到一個頁請求時,就檢查 HTTP 請求標題,以獲得 SessionID cookie。</p>
<p>在將 SessionID cookie
存儲于用戶的瀏覽器之后,即使用戶請求了另一個 .asp
文件,或請求了運行在另一個應用程序中的 .asp 文件,ASP
仍會重用該 cookie
跟蹤會話。與此相似,如果用戶故意放棄會話或讓會話超時,然后再請求另一個
.asp 文件,那么 ASP 將以同一個 cookie
開始新的會話。只有當服務器管理員重新啟動服務器或用戶重新啟動
Web 瀏覽器時,此時存儲在內(nèi)存中的 SessionID 設(shè)置將被清除,用戶將會獲得新的
SessionID cookie。</p>
<p>通過重用 SessionID cookie,ASP 將發(fā)送給用戶瀏覽器的 cookie
數(shù)量降為最低。另外,如果您決定您的 ASP
應用程序不需要會話管理,就可以不讓 ASP 跟蹤會話和向用戶發(fā)送
SessionID 。</p>
<p>ASP 在以下情況下不發(fā)送會話的 cookie:</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -