我最近开始修补Project Euler问题,并尝试在Javascript中解决它们。这样做,我倾向于产生许多无限循环,现在我想知道是否有更好的方法来终止脚本,而不是在Firefox或Chrome中查杀选项卡?Javascript调试
而且,是萤火虫仍然被认为是“最好的”调试器(我自己,我不能看到Safari /铬萤火虫和Web开发工具多大区别)。
任何一个愉快的星期天都有什么!
我最近开始修补Project Euler问题,并尝试在Javascript中解决它们。这样做,我倾向于产生许多无限循环,现在我想知道是否有更好的方法来终止脚本,而不是在Firefox或Chrome中查杀选项卡?Javascript调试
而且,是萤火虫仍然被认为是“最好的”调试器(我自己,我不能看到Safari /铬萤火虫和Web开发工具多大区别)。
任何一个愉快的星期天都有什么!
如果您不想显式退出代码,请尝试使用条件断点。如果您打开Firebug的脚本控制台并右键单击代码旁边的装订线,它将插入一个断点并为您提供触发断点的选项以满足某些条件。例如,如果你的代码是这样的:
var intMaxIterations = 10000;
var go = function() {
while(intMaxInterations > 0) {
/*DO SOMETHING*/
intMaxIterations--;
}
};
...你既可以等待循环的所有10,000次重复完成,或者你可以把一个条件断点某处内环路和指定条件intMaxIterations < 9000
。这将允许循环内的代码运行1000次(实际上,实际上是1001次)。此时,如果你愿意,你可以刷新页面。
但是,一旦脚本进入无限循环(无论是因失误或设计),有没有很多可以做,我知道的,从继续停止它,如果你还没有为此做好了准备。这通常是为什么当我做大量递归时,我会限制特定代码块的运行次数。有很多方法可以做到这一点。如果您认为该行为是一个实际的错误,请考虑抛出它。例如。
var intMaxIterations = 10000;
var go = function() {
while(true) {
/*DO SOMETHING*/
intMaxIterations--;
if (intMaxIterations < 0) {
throw "Too many iterations. Halting";
}
}
};
编辑: 它只是发生,我认为是因为你使用这个脚本的唯一的人,网络工作者是理想的解决方案。
你看到的基本问题是,当JS进入无限循环,它会阻止浏览器,留下反应迟钝,你通常会用停止执行的任何事件。网络工作者仍然是一样快,但他们让浏览器不受负担,事件正常启动。这个想法是,您将高需求任务(在这种情况下为您的欧拉问题算法)传递给Web Worker JS文件,该文件在其自己的线程中执行,并且仅在主浏览器不需要时才占用CPU资源。最终的结果是,你的CPU仍然像现在这样,但你的浏览器保持快速和响应。
这是第一次建立网络工作者的有点害虫,但在这种情况下,你只需要做一次。如果你的算法永远不会返回,只需点击按钮并杀死工作线程。有关更多信息,请参阅MDC上的Using Web Workers。
Firebug仍然是我个人的首选工具。
至于一种杀死你的无尽循环的方式。有些浏览器会阻止这种情况发生。不过,我仍然宁愿只是去ctrl + w,但这仍然关闭选项卡。
一些其他的替代品,你可以看看:
歌剧:蜻蜓
Safari /铬:Web检查
虽然,Opera有一个很好的一套开发工具,我发现很有用。 (工具 - >高级 - >开发工具)
我主要使用Firefox或Safari,但IE中的开发人员工具出奇的好,尽管你仍然需要使用Fiddler来监视文件请求。我不会使用IE来处理执行时间是这样的问题的任何JS,但是对于一般的Web调试来说,这是相当不错的。 – Andrew 2010-09-19 12:09:59
你如何定义“最佳”? Firebug为您提供几乎所有标准调试器所需的功能,如单步执行代码,断点等。 – rkg 2010-09-19 08:14:50
使用浏览器作为ide的想法,您可以在其中进行模拟,这真的很酷!为了好玩,我还在JavaScript中实现了一个频道编码器(编码理论)。我发现Opera的运行速度最快,到目前为止您的体验如何? – ustun 2010-09-19 15:07:35
大多使用萤火虫,因为即时通讯在Linux上。工作正常,但当它挂起它可以得到技巧凌乱。 – Buzzzz 2010-09-20 13:34:31