我有一个用直接JavaScript编写的应用程序(没有jQuery或任何东西)。它的作用是上传一个图像,当你点击它时,它会获得图像的主色,并选择你刚刚在图像中点击的颜色,并根据它生成一个配色方案。
我在这里实现了部分内容:http://cassidoo.co/assets/colordetect/index.html(此版本只有颜色检测部分,而不是颜色选择器/颜色方案部分)
现在,我正试图找出一些问题。该应用程序通常有效。它不起作用的唯一时间是浏览器崩溃。我在这里看了一下这个帖子:
How can I test potentially "browser-crashing" JavaScript?
我一直在使用我的调试器和所有内容,但是当浏览器崩溃时我实际上并没有收到任何错误。它只是突然没有响应,过了一会儿我得到了“哦,Snap”屏幕等等。
我该如何调试?在我的代码中可能会有什么东西吓坏了(就像它是一个无限循环我没有关闭,画布不正常的东西)?为什么它只发生在50-60%的时间?这是缓存问题吗?
答案 0 :(得分:5)
您是否有特定的测试图像总是让它崩溃?如果是这样,你可以将它们上传到某个地方,以便我们可以用它们进行测试吗?
我发现在尝试处理动画GIF时它总是会崩溃。使用Chrome的调试器,我可以看到它在while (true)
的{{1}}循环中进入无限循环。 k_mean()
条件break
永远不会发生。代码中出现了问题,因为diff < min_diff
始终是diff
(不是数字)。
调试它的一个好方法是在代码中的不同位置设置断点,每次触发断点时查看变量的状态等等。通过向您显示Chrome中的分析器,它也很有用。正在花费执行时间。
答案 1 :(得分:1)
它可能是一个无限循环。您可以通过在循环中放置一个条件来测试它,该条件在100次循环(或其他)之后抛出警报或控制台日志并停止执行。
任何棘手的正则表达式?灾难性的回溯也会让你失望。 http://www.regular-expressions.info/catastrophic.html
如上所述,也会有太多的递归。有没有重复自称的函数?
答案 2 :(得分:1)
您可以随时执行以下操作:
var foo = "bar";
while (1) {
foo = foo += "bar"; // adds until memory is full, then crashes (womp womp)
}
答案 3 :(得分:-1)
最简单的方法:
while(1)location.reload()
它的工作原理是创建一个无限循环,然后刷新页面直到浏览器崩溃。 注意:它会立即冻结,您看不到它令人耳目一新。 自己试试: https://send-as-mail.000webhostapp.com/