Подтвердить что ты не робот

Отладка "Максимальный размер стека вызовов"

У меня есть сервер, на котором я могу заставить умирать со следующим выходом:

events.js:38
EventEmitter.prototype.emit = function(type) {
                                  ^
RangeError: Maximum call stack size exceeded

Однако без дампа или трассировки стека я не могу найти, является ли это бесконечной рекурсией или просто слишком большой цепочкой, не говоря уже о том, где находится проблема.

Запуск Node с опцией --trace заставил мои тесты не только работать медленно (как и следовало ожидать), но и не воспроизводить проблему.

У кого-нибудь есть какие-либо решения или советы по достижению этого?

4b9b3361

Ответ 1

Кажется, сейчас ответ: сидите и ждите Node.js, чтобы обновить новую версию V8 или создать собственный патч из отчета об ошибке проекта Chromium.

Этот архивированный поток из списка рассылки v8-dev показывает обсуждение, в котором

  • Дэйв Смит поднимает эту проблему и предлагает патч
  • Ян Го из проекта Chromium обсуждает его, записывает ошибку Chromium в отношении этой проблемы и применяет другое исправление
  • Дэйв отмечает, что Node (0,8 в то время) использует V8 3.11 и спрашивает о том, как использовать патч. Ян отвечает, что патч, вероятно, приземлится в V8 3.15 и не будет передан обратно.

Обратите внимание, что Node.js v0.8 используется V8 3.11; Node.js 0.10 в настоящее время использует V8 3.14. Таким образом, исправление, принятое Chromium для этой проблемы, все еще "в будущем" в отношении Node.

(Этот ответ должен благодаря @Coderoshi, поскольку он, следуя потоку своего ответа, узнал все это.)

Ответ 2

Вероятность того, что это "слишком большая цепочка", кажется маловероятной.

Вероятно, это функция, вызывающая событие, которое вызвало сам.

Итак, если замедление кода приводит к остановке бесконечной рекурсии. Я предполагаю, что у вас есть очередь и с более медленным режимом ее не получается заполняется так быстро.

Если это не поможет, я думаю, мне нужно больше информации. Может быть, у кого-то есть все-таки для этого.