Отслеживание переполнения стека в метеоре/узловом волокне

StackOverflow https://stackoverflow.com/questions/19843707

Вопрос

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

Meteor server running on: http://localhost:3000/
W202407-10:06:05.740(-8)? (STDERR) /Users/dauser/.meteor/tools/0b2f28e18b/lib/node_modules/fibers/future.js:173
W202407-10:06:07.363(-8)? (STDERR)                      throw(ex);
W202407-10:06:07.363(-8)? (STDERR)                            ^
W202407-10:06:07.363(-8)? (STDERR) RangeError: Maximum call stack size exceeded
=> Exited with code: 8
=> Meteor server restarted

Насколько я понимаю, что -то повторяется слишком с энтузиазмом, стек сервера взорвался, и он сбои. К сожалению, у меня нет никакого реального представления о том, где эта оскорбляющая функция-я посмотрел на звонок My Deps.autorun (только один на данный момент), и это не кажется проблемой. Ни один из моего кода не реализован с явной рекурсией, и у меня нет никаких оснований подозревать, что крупные объекты передаются вокруг. Очевидно, я не совсем уверен, конечно.

Я действительно просто ищу совета о том, как придумать код, чтобы показать мне, где все выходит из -под контроля. Поскольку Meteor много делает за кулисами, было бы очень полезно, если бы кто -то мог дать мне несколько указателей относительно того, куда искать.

Просто возвращаюсь к этому, и я все еще довольно потерян в отношении того, где искать. это Предлагаемое обновление узла 0.11.x дало бы мне больше информации, но, похоже, не добавило больше подробностей при сбое.

Сбой происходит после любого взаимодействия страницы, то есть сервер запускается и работает нормально, но если я перезагружаю браузер или взаимодействую с самой страницей, бум!

По популярному спросу, вот код сервера:

isAuthorized = () ->
    console.log "checking authorization"
    this.userId == Assets.getText('authorizedUsers')

Meteor.methods(
    isAuthorized : isAuthorized
    filePickerKey : () -> 
        # TODO: properly abstract this, rather than copy/paste...       
        if this.userId == Assets.getText('authorizedUsers')
            Assets.getText('fpKey')
        else
            Meteor.Error 403, 'Error 403: Forbidden')

Некомментирующая линия 172 Future.js не предоставила более подробной информации:

I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded

И вот проблема, с которыми я сталкиваюсь, пытаясь использовать Node-Incepport. Я играл с этим в течение последних полчаса, поэтому я, вероятно, просто допускаю некоторые фундаментальную ошибку, но: я установил инспектора узла через NPM (NPM Install -G Node-Incepper).

Тогда я пытаюсь

$ node-inspector &
[1] 3408
$ Node Inspector v0.6.2
  info  - socket.io started
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

$ meteor &
[2] 3413
$ [[[[[ ~/Projects/indefinite-ways ]]]]]

=> Meteor server running on: http://localhost:3000/

$ kill -s USR1 3413
Hit SIGUSR1 - starting debugger agent.
debugger listening on port 5858

Все идет нормально. На этом этапе клиентская сторона не открыта в моем браузере (т.е. нет вкладки, указанного на Localhost: 3000). Я открываю вкладку Chrome, указывающую на Localhost: 5858, и вижу источник Meteor.js Я установил точку останова в строке 6 Meteor.js

var Fiber = require('fibers');

а затем откройте вкладку Meteor Client (Localhost: 3000), и вышеупомянутый переполнение стека снова появляется. Отладчик не останавливается на линии 6 или каким -либо другим способом указывает на то, что он заметил. То же самое верно, если я установил точку останова в строке 3.

Это было полезно?

Решение 2

Немного более полезный ответ исходит от Неофициальный метеор:

$ node-inspector &
$ NODE_OPTIONS='--debug-brk' mrt run &

Это запускает процесс узел-инспектора в заднем плане, а затем запускает контейнер с узлами Meteor с правильным набором флагов отладки. Открытие вкладки Chrome to http://127.0.0.1:8080/debug?port=5858 Позвольте мне пройти через.

Также нет строго Ответ на вопрос, но строка нарушения в коде, выше, кажется, звонит Meteor.Error в коде сервера. Я все еще с радостью приму ответ на это, который определил бы это. Я предполагаю, что Meteor.Error совсем не подходит, и в попытке проанализировать его, стек взрывается.

Другие советы

Пытаться Узел-инспектор, это позволяет проверять Callstack. Это видео презентация Как использовать его, визуально это выглядит как Chrome Debugger (это тот же базовый источник).

Строка 173 будущего.js Пытает исключение вперед к следующему слушателю. В вашем случае появляется следующий слушатель - сам экземпляр, в результате чего стек сбоя.

Отредактируйте свой файл Future.js (путь, ссылаясь на OP) и понаправляйтесь на линию консоли. Если выход.

Я предполагаю, что это связано с отсутствующим пакетом, за эта ветка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top