真是不好意思,吃桃居然吃了一整天,下面繼續說我的JavaScript調試環境。
不管我們是怎麼調試JavaScript,他總是在browser裡運行,下面我都說在IE裡的情況。目前我使用IE6.0 sp1,要啟動指令碼調試,需要在IE的Tools->Internet Options的Advanced裡uncheck 'Disabled Script Debugging.',否則指令碼出錯時我只能在browser的status bar上看到一個錯誤提示表徵圖。這樣一來,當browser裡出現指令碼錯誤的時候,就會彈出一個這樣的warning dialog:
點擊Yes後,將出現如下視窗:
這個debugger dialog裡列出的‘Possible Debuggers’就是我機器裡已安裝的Script調試器。其中"Microsoft Script Editor"就是上次說的Visual Studio裡帶的調試器了,... 2003、... 2005就不用說了,就是VS.NET了。這種情況的調試是最普通的調試,可以直接把斷點定位到指令碼錯誤的行上,然後通過watch視窗看local變數的值來確定錯誤的所在。
那麼指令碼要是不明顯的出語法錯誤怎麼設斷點呢?這裡有兩個辦法,一個是使用IE View菜單裡的Script Debugger子功能表(這個菜單是在IE的Tools->Internet Options->Advanced裡設定過才會出來的):
"Open"就和上面說到到的點"Yes"後出來的視窗一樣,點"Break at Next Statement"比較的有意思,它將會在你的Browser執行下一條指令碼的時候讓你選擇調試器來調試,這一點十分便於我們分析別人的擁有複雜JavaScript的頁面。比如gmail裡面的管理頁面,如果我想看看點了star之後它是怎麼處理的,就可以使用這個"Break at Next Statement",讓它break在next statement上。不過使用這個feature有個技巧:有的頁面由於捕獲了onmousemove事件,如果你通過滑鼠去點擊菜單裡的"Break at Next Statement"條目,你的next statement總是被onmousemove給捕獲了,而得不到你想要的onclick的語句的中斷,怎麼辦呢?! 那就是使用快速鍵啦,比如你希望啟用調試gmail裡的mail list上的star(如)被點擊時執行的指令碼,你就把滑鼠放在star上面,先按快速鍵"Alt+V"、"u"、"b",再點擊就行了。
到這裡就可以說一下為什麼現在還要用VS.NET 2003,而不只用VS.NET 2005來調試指令碼了。比如上面的case,如果我在"Possible Debuggers"裡選"New Instance of Visual Studio Whidbey",我們將會得到一個Msg Box:
用我test team一個哥們的話來說:真是傷感哦!
這時我們使用VS.NET 2003就可以順利的跟蹤了。
確實鬱悶吧?不過,我相信whidbey正式release的時候,這個問題因該是能解決的了,那時2003就可以完全下崗了。
當然讓調試器whidbey跟蹤<script src="..."></script>這種情況不是完全沒有可能,這裡有個小hack可以使用的。就是在調試前把會被引用到的script檔案預先就開啟在whidbey裡,然後就能trace到該檔案中去,這個辦法顯然只能解決本地調試,對於伺服器端引用的意義不大,因為我們沒法預先把伺服器上的指令檔開啟:(。
to be continued ...