以前我比較輕視javascript,但在的工作中越來越感覺到它的重要,測試部給我報的bug也多半源於此,所以決心補習js,那麼首先要搞定的就是調試器,發現firefox 下的venkman很不錯,強大 小巧,而且免費。
基於Mozilla的瀏覽器(如firefox)有個JavaScript調試環境,叫venkman,可以從http://www.hacksrus.com/~ginda/venkman/下載,然後用firefox打開得到的xpi文件,它就會自動安裝,重啓firefox,選擇 工具->JavaScript Debugger 啓動venkman,如圖,
窗口布局很清晰,Loaded Scripts窗口中顯示當前可用的javascript,點擊文件旁邊的加號,就會打開一個詳細列表,列出該文件中的所有函數,其他窗口不用多說了。
斷點跟蹤纔是我們關注的重點,venkman支持兩種斷點:硬(hard)端點和將來(future)斷點。
兩者的區別是,將來斷點設置在函數體之外的代碼行上。一旦這些代碼行加載到瀏覽器上就會立即執行。與之相反,只有當爲響應某個動作或事件執行了函數時,位於函數體內的代碼纔會?蔥小?
看例子,一個js文件 DebugSample.js,和一個調用頁面 CallPage.html
// DebugSample.js
var dateString = new Date().toString();
function doFoo(){
var x = 2 + 2;
var y = "hello";
alert("test");
}
// CallPage.html
<html>
<title>test page</title>
<script language="JavaScript" src="DebugSample.js"></script>
<body>
<form id="test">
<input type="button" value="test" οnclick="doFoo()"/>
</form>
</body>
</html>
用firefox打開CallPage.html,啓動venkman,在所需的代碼行上設置一個斷點,點擊代碼行左側的邊欄即可。每次點擊這一行時,這行就會輪流的切換爲以下3種:無斷點、硬斷點、將來斷點。硬斷點由一個紅色的B指示,將來斷點有橙色的F指示。函數體外的代碼行只能切換爲無斷點和將來斷點。
我們在var y = "hello";這一行設個斷點
然後點擊頁面的“test”按鈕,可以看到在斷點處停止了
接下來的操作想必都知道了,它和其他的debugger用法相同,下面看一下venkman的一個強大特性,可?員嘈炊ㄖ拼耄⒃諉看沃蔥卸系閌痹誦姓廡┒ㄖ拼搿T?Breakpoints窗口中,右鍵點擊一個斷點,選擇Breakpoint Properties(斷點屬性)
這樣會打開Breakpoint Properties對話框,允許你修改斷點的行爲
這個窗口的強大之處在於“Wen triggered, execute…”(如果觸發,則執行…),選中這個複選框,會置一個文本框有效,可以編寫js代碼,每次遇到斷點時都會執行此代碼,向這個定製腳本傳遞的參數名爲_count_,它表示遇到斷點的次數,下面的4個行爲中也以“Stop if result is true”的功能最強大,它意味着只有當定製代碼的返回值爲true時斷點纔會暫停執行。
想象一下,假設你在迭代處理一個很大的對象列表,開發過程中,你注意到,計算時在一個特定對象處失敗了。如果只是處理單個對象或只是個小的對象列表,則沒有問題,在循環中設個斷點,進行跟蹤,但如果列表很大,這樣每個循環都進就很麻煩,這時就可以使用條件斷點功能,知道某種情況會失敗,編一個條件語句,滿足條件時斷點才暫停。
繼續看例子,在上面的DebugSample.js中添加方法:
function testBreakpointProperties(){
var list = ["one", "two", "three", "four", "five", "six", "seven", "eight"];
var item = null;
for(var i=0; i<list.length; i++){
item = list[i];
item = "Text is: " + item;
}
}
把CallPage.html中按鈕的onclick改爲οnclick="testBreakpointProperties()",在venkman中設置斷點
右鍵點擊紅色斷點標記,選擇Breakpoint Properties,打開對話框,選擇“Wen triggered, execute…”,在文本框中輸入“return item == "seven";”,再選擇“Stop if result is true”,在頁面點擊“test”按鈕會進入venkman,這時item的值爲“seven”,很方便吧,省去了我們自己一個一個循環的跟蹤。
轉自:http://www.zhuoda.org/irini/71408.html