2012-03-23 66 views
1
Windows 7 
Firefox 10.0.1 

我有一個簡單的setTimeout邏輯,我想使用Firebug調試器測試幾個斷點。Firebug調試器忽略setTimeout?如何測試它?

test.js

console.log("one"); 
setTimeout(function(){ console.log("hmm"); }, 5000); 
console.log("two"); //breakpoint here 
console.log("three"); 

的test.html

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 

     <script type="text/javascript" src="../js/test.js" ></script> 

    </head> 
    <body> 
     <h1>Hello World!</h1> 
    </body> 
</html> 

使用Firebug debugger,我把斷點在註釋行(其中的console.log( 「二」)) 當我加載html頁面我得到輸出:

one 

並且進程按照預期在斷點處暫停,但是setTimeout永遠不會執行。

這是螢火蟲調試器的錯誤?有沒有人見過這個?

UPDATE:

我研究多一點,結果發現:

如果在調試模式下點擊「繼續」和5000毫秒內經歷斷點(這是指定時間的setTimeout),在「嗯「的味精出現。

如果你在斷點停止超過5000ms,那麼即使在「繼續」按鈕後,「hmm」msg也不會顯示出來。

+0

如果你把腳本元素,在機身底部發生了什麼? – madr 2012-03-23 07:03:37

+0

這是完全有效的超時行爲。如果你在調試器中的任何一點中斷,在你繼續之前什麼都不會執行 - 超時包括 – 2012-03-23 07:26:05

+0

@madr:沒什麼不同。在「斷點」繼續之後,輸出是「一二三」,就這些了。 – 2012-03-23 07:26:56

回答

1

setTimeout只有當Javascript執行線程變爲空閒時,即使線程忙時時間不足,也會觸發觸發器。放置一個斷點只會暫停線程,並且在停止線程時保持繁忙狀態。因此,此代碼將返回

one 
two 
three 
hmmm //(in 5 seconds, if no breakpoint, at once if you stop at a breakpoint for more than 5 seconds and then run the code further) 

這是正確的setTimeout行爲。

+1

如果我在斷點處停留超過5000ms,setTimeout中的「hmm」永遠不會輸出。 – 2012-03-23 07:30:06

+0

它只有在初始化腳本執行完成後才能使用。而且你正在用斷點暫停它的執行。 – 2012-03-23 08:53:12

1

我沒有問題。裏面的setTimeout代碼執行5秒鐘後,讓你的預期輸出是

一個

+0

嗯..我的控制檯只有一個兩個三,沒有從setTimeout輸出......怪異 – 2012-03-23 07:24:49

2

這是一個Firebug的錯誤;)

請看看this issue

+0

我遇到了同樣的問題試圖調試,並讓我的setTimeout調用消失在我身上。看起來有一個補丁:https://github.com/firebug/firebug/commit/70a32d81406a49853330310baed6305e027233e2 – Chris 2014-01-07 18:30:19

0

您可以只設置斷點回調裏面的setTimeout的 及STEP-在繼續它的內部