How to debug RangeError: Maximum call stack size exceeded without developer console

How to debug RangeError: Maximum call stack size exceeded without developer console

在复杂的 JavaScript 应用程序中(使用 jQuery 和 jQueryUI),JavaScript 偶尔会抛出错误。我们捕获并记录了这些错误,但堆栈跟踪并未显示完整的来源。到目前为止,我们一直无法找到错误的根本原因。

RangeError: Maximum call stack size exceeded 
at RegExp.[Symbol.replace] (native) at String.replace (native) 
at Function.camelCase (<jquery>) 
at Function.css (<jquery>) 
at Object.get (<jquery>) 
at init.cur (<jquery>) 
at init (<jquery>) 
at Function.Ya [as Tween] (<jquery>) 
at Object.createTween (<jquery>) 
at Object.r.Animation.r.extend.tweeners.* (<jquery>) 

还有一个:

RangeError: Maximum call stack size exceeded 
at RegExp.[Symbol.replace] (native) at String.replace (native) 
at Function.camelCase (<jquery>) 
at Function.css (<jquery>) 
at (<jquery>)
at S (<jquery>) 
at a.fn.init.css (<jquery>) 
at HTMLImageElement.jc (<jquery>) 
at HTMLImageElement.e.complete (<jquery>) 
at i (<jquery>) 

有没有什么方法可以在不使用开发人员工具包的情况下找到错误的根源?这些错误似乎只发生在 Chrome 上,而在我们使用 jQuery 的旧版本时不会发生。 (我们现在是 3.1.1)

我想我们发现了这个错误。在这个 JSfiddle 中它发生:

https://jsfiddle.net/c41bgs24/12/

function completeFunc(){
  var $this = $(this);
  var fadeIn = $this.css("opacity") == 0;
  console.log("complete", (new Date()).getTime());
  $this.animate({
    opacity: fadeIn ? 1 : 0
  }, 2000, "linear", completeFunc);
}

// Make sure the tab is switched out within 3 seconds. This tab needs to be inactive when the timeout triggers for the bug to take place.
setTimeout(function(){
    $("#test").each(completeFunc);
}, 3000);

确保在 3 秒之前退出它,以确保错误发生。

我们已就此向 jQuery 提交错误报告: https://github.com/jquery/jquery/issues/3507