2012-03-23 36 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-在继续它的内部