在文章調試JavaScript/VB Script指令碼程式(Wscript篇)裡面,有網友問我如何調試ASP裡面的指令碼程式,我不知道他問得是調試ASP網頁裡面的VBScript ASP代碼,還是ASP.NET網頁裡面的JavaScript/VBScript用戶端代碼,所以我就在這篇文章裡面先將調試ASP網頁裡面的ASP代碼這種情況都解釋一下吧。
估計ASP這個玩藝用的人已經很少了,但是還是有很多老網站是用ASP技術製作的,維護的時候,還是需要調試修改一下ASP網頁代碼的。雖然ASP網頁的代碼大部分都是VBScript或者JavaScript編寫的,而很多在瀏覽器上啟動並執行DHTML代碼也是用JavaScript/VBScript寫成,這很容易誤導程式員,認為兩者都是在瀏覽器上啟動並執行,其實不然。
ASP網頁代碼是在伺服器端啟動並執行,具體來說是由IIS裡面執行,為什麼IIS可以同時執行ASP網頁和ASP.NET網頁代碼,如果我告訴你IIS還可以執行JSP代碼,你信不信?當然啦,IIS如何可以執行ASP,ASP.NET和JSP等代碼又可以開一系列的文章來講解啦。
而DHTML代碼是在瀏覽器端(IE或者Firefox)執行的,兩種代碼不同的執行方式也決定了不同的調試策略。
綜上所述,兩種是不同是事物,但是兩者是相輔相成,不可分割的……
為了調試ASP網頁代碼,你需要調試IIS背景工作處理序(不是IISAdmin那個進程),在IIS 6.0中,IIS背景工作處理序名叫做w3wp.exe(World Wide Web Process),在IIS 6.0之前好像是dllhost.exe。因為IIS 5.0用的人已經不多了—主要是我已經不用了,所以本文是以IIS 6.0作為平台講解的。
因為開啟調試支援會影響到網站的效能—即響應速度,所以預設情況下,IIS將ASP的調試功能關閉了:
1. 開啟IIS管理介面(IIS Manager或者iisadmin.exe)。
2. 按右鍵你要調試的網站,例如“預設網站(Default Web Site)”。
3. 點擊“家目錄(Home Directory)”,點擊“配置(Configuration)”。
4. 選擇“調試(Debugging)”頁簽。
5. 將“調試標誌(Debugging Flags)”的兩個勾都選上,如所示:
6. 啟動Visual Studio,點擊“工具(Tools)”—“附加到進程…(Attach to process …)”。
7. 在“選擇進程(Available Process)”對話方塊裡面,選擇w3wp.exe(注意,選擇“類型(Type)”列為“指令碼,x86(Scripting, x86)那一個”)。
如果你在對話方塊裡面沒有看到w3wp.exe,請先訪問一下網站—因為網站可能重啟了,然後點擊“附加到進程…(Attach to process …)” 對話方塊上面的[重新整理] 按鈕。
如果還是沒有看到w3wp.exe,勾選“顯示所有使用者的進程(Show processes for all users)”和“顯示所有會話的進程(Show processes in all sessions)”兩個複選框,再點重新整理試試。
如果還是沒有看到,那麼……
a) 要麼回到第一步重新做一次。
b) 要麼問候一下Visual Studio祖宗,回去睡覺,徹底忘掉這篇文章。
現在的效果應該和類似:
8. 很遺憾,現在的Visual Studio 只支援設定函數斷點了,至少我在2008裡面是不能直接在程式碼上設定斷點了。
9. 點擊Visual Studio的“調試(Debug)”—“視窗(Windows)”—“斷點(Breakpoints)”菜單。
10. 然後點擊“函數斷點(Break at Function …)”,如所示:
11. 在接下來的視窗中輸入—TestFunction,如所示:
12. 回到IE裡面,重新整理一下頁面,這個時候,你應該可以做ASP調試了,如所示: