Firebug调试器忽略setTimeout?怎么测试呢?

时间:2012-03-23 07:00:18

标签: javascript html firebug

Windows 7
Firefox 10.0.1

我有简单的setTimeout逻辑,我想使用Firebug调试器测试几个断点。

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(“two”)) 当我加载html页面时,我得到输出:

one

并按预期在断点处停止但 setTimeout永远不会被执行。

这是firebug调试器的错误吗?有没有人见过这个?

更新

我更多地调查并发现:

如果在调试器模式下单击“继续”并在5000ms(在setTimeout中指定的时间)内经历断点,则会显示“hmm”msg。

如果你在断点处停止超过5000毫秒,那么即使在“继续”按钮之后,“hmm”msg也不会显示。

4 个答案:

答案 0 :(得分:2)

这是一个Firebug错误;)

请查看this issue

答案 1 :(得分:1)

只有在Javascript执行线程空闲后,

setTimeout才会触发,即使线程繁忙时超时也是如此。设置一个断点只是挂起线程,并在停止时保持忙碌状态。所以,这段代码将返回

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行为。

答案 2 :(得分:1)

我没有问题。 setTimeout中的代码在5秒后执行,因此您的预期输出为

一个

2

3

答案 3 :(得分:0)

你可以在回调中设置断点到setTimeout 并继续介入其中