2012-03-19 5 views
4

Я работаю над приложением node.js, и иногда он замерзает. Я предполагаю, что это связано с тем, что поток пользовательского кода заморожен. Кажется, это происходит примерно через 5 минут использования, но я понятия не имею, почему. Есть ли какие-либо инструменты, которые позволят вам знать, где он зашел в тупик? Помимо добавления записей в каждую строку.как отлаживать приложение node.js?

Обновлено добавить больше информации ....

Я добавил некоторые операторы трассировки и свел к следующему коду:

exports.addLocationToRoute = function(req, res) { 
    console.log("27"); 
    console.log(req.body); 

    var queryConfig = { 
     text: "INSERT INTO route_locations (route_id, location_id, order_id) VALUES ($1, $2, $3);", 
     values: [req.params.id, req.body.locationId, req.body.order] 
    }; 

    pg.connect(conString, function(err, client) { 
    console.log("28"); 
... 

Я вижу 27 выхода в следе, но не 28. Есть ли способ понять, почему он заморожен между этими двумя точками?

обновление 2:

Я просто попытался снова воспроизвести, и это становится заморожен в другом месте в коде, но в данный момент он также призывает

pg.connect(conString, function(err, client) { 
+1

Возможный дубликат [Как отлаживать приложения node.js] (http://stackoverflow.com/questions/1911015/how-to-debug-node-js-applications) –

+2

Это не дубликат. Я специально спрашиваю, как найти, где в коде он зашел в тупик. – dan

+0

Это как совсем другой вопрос. –

ответ

4

Я использую JetBrains WebStorm IDE для разработки Javascript. Он имеет полную поддержку Node, что означает, что вы можете установить контрольные точки и проследить свой код. Однако WebStorm не является бесплатным. Вы также можете посмотреть на старую тему на отладке Node: How do I debug Node.js applications?

Там в ответ принят об использовании Chrome Development Tools, но я предпочел бы последовал путь более популярного ответа по использованию node-inspector для отладки.

+0

В любой среде JetBrains IDE должен быть плагин Node.js. Я использую IntelliJ, и он делает то же самое –

+0

. Можете ли вы использовать это для паузы, как только оно замерзло, чтобы узнать, где он находится в стоп-металле? Это не работает с инструментами chrome dev. – dan

+0

Да, вы можете сделать паузу, но не уверен в стеке вызовов. Если вызываемых обратных вызовов нет, приостановка не приведет вас никуда. @j pimmel: да, идея тоже прекрасна, но это стоит дороже. –

0

Возможно, вы захотите установить узел в режим --debug и проанализировать его с помощью node-inspector.

Когда код блокируется в каком-либо месте, вы можете приостановить выполнение с помощью кнопки паузы (http://pix.am/LYZz/) и проверить трассировку стека, чтобы найти блокировки.

+0

У меня это настроено, но как вы можете использовать его, чтобы узнать, где он заблокирован? Я не хочу добавлять точки останова, потому что это происходит только раз в 5-10 минут. Пройдя через код, потребуется несколько часов для воспроизведения. – dan

+0

Скажите это вместо пауз вместо исключений. Однако, исходя из вашего обновления, похоже, что базовый сервер PostgreSQL отклоняет ваше соединение (слишком много сразу?). Почему вы открываете новые соединения для каждого запроса, а не повторно используете одно и то же соединение? –

+0

наверняка у вас должно быть одно соединение для каждого запроса, иначе у вас могло бы быть два запроса, используя одно и то же соединение одновременно? – dan

Смежные вопросы