Отладка RangeError: превышен максимальный размер стека вызовов без консоли разработчика


В сложном JavaScript-приложении (с jQuery и jQueryUI) JavaScript иногда выдает ошибку. Мы ловим и регистрируем эти ошибки, но stacktrace не показывает полное происхождение. До сих пор мы не смогли найти основную причину ошибки.

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)

1 2

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