debugging JavaScript中的什么会导致浏览器崩溃?

axkjgtzd  于 2023-05-18  发布在  Java
关注(0)|答案(6)|浏览(180)

我有一个应用程序,是用纯JavaScript编写的(没有jQuery或任何东西)。它所做的是上传一张图像,当你点击它时,它会获取图像的主色,并选择你刚刚在图像中点击的颜色,并基于此生成一个配色方案。
我在这里实现了其中的一部分:https://github.com/cassidoo/color-detect(此版本只有颜色检测部分,没有颜色选择器/配色方案部分)
现在,我想弄清楚一些问题。应用程序通常工作。唯一不起作用的时候是浏览器崩溃的时候。我看了一下这里的线程:
How can I test potentially "browser-crashing" JavaScript?
我一直在使用我的调试器和所有东西,但当浏览器崩溃时,我实际上没有得到任何错误。它只是突然没有React,过了一会儿,我得到了“哦,捕捉”屏幕或什么。
我如何调试它?我的代码中有什么可能会出错(比如它是一个我没有关闭的无限循环,画布上的一些不正常的东西)?为什么只有50-60%的时间发生?这是缓存问题吗?

4zcjmb1e

4zcjmb1e1#

你有特别的测试图像,总是使它崩溃?如果是这样,你能把它们上传到某个地方,让我们用它们来测试吗?
我发现它总是崩溃时,试图处理一个动画GIF。使用Chrome的调试器,我可以看到它在k_mean()中的while (true)循环中进入了一个无限循环。break条件diff < min_diff永远不会发生。代码中出现了错误,因为diff始终是NaN(不是数字)。
调试它的一个好方法是在代码中的各个地方设置断点,每次触发断点时查看变量的状态等。Chrome中的分析器也很有用,可以显示执行时间花在哪里。

7xllpg7q

7xllpg7q2#

这可能是一个无限循环。您可以通过在循环中放置一个条件来测试这一点,该条件在100个循环(或其他循环)后抛出警报或控制台日志并停止执行。
有什么复杂的正则表达式吗?灾难性的回溯也会让你崩溃。http://www.regular-expressions.info/catastrophic.html
如上所述,太多的递归也会。是否有函数反复调用自己?

niknxzdl

niknxzdl3#

你总是可以这样做:

var foo = "bar";
while (1) {
    foo = foo += "bar"; // adds until memory is full, then crashes (womp womp)
}
rnmwe5a2

rnmwe5a24#

以下是一些可能导致浏览器崩溃的因素,尽管我不确定它们是否导致了您的问题。

  1. Anything while(1)(无限循环)-浏览器似乎无法处理这些
    1.数据过多的变量(内存不足-如果存储大图像,则可能是这样)
    1.尝试重新加载太多次(如realloads的无限循环)
  2. SetInterval到SetInterval到SetInterval等...(这比猜测更傻)
    可能是一个无限循环,或者只是一段奇怪的时间。希望你能修好它!
3wabscal

3wabscal5#

open('javascript:while(true) console.log("hi");close()')

这可能会使浏览器立即崩溃。

p3rjfoxz

p3rjfoxz6#

最简单的方法:

while(1)location.reload()

它的工作原理是创建一个无限循环,然后刷新页面,直到浏览器崩溃。注意:它会立即冻结,你看不到它的刷新。你自己试试看:https://send-as-mail.000webhostapp.com/

相关问题