Восстановить отладку в WebStorm

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

Мой сервер restify находится в папке server.js:

var restify = require('restify');

function respond(req, res, next) {
    res.send('hello ' + req.params.name);
    next();
}

var server = restify.createServer();
server.get('/hello/:name', respond);
server.head('/hello/:name', respond);

server.listen(8080, function() {
    console.log('%s listening at %s', server.name, server.url);
});

Я хотел бы установить точку останова внутри функции ответа.

Когда я запускаю решение, оно запускается нормально, и я могу попасть в конечную точку hello:

"C:\Program Files (x86)\JetBrains\WebStorm 2016.1.1\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" server.js
restify listening at http://[::]:8080

Однако, нажав отладку, я получаю:

"C:\Program Files (x86)\JetBrains\WebStorm 2016.1.1\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" --debug-brk=60036 server.js
Debugger listening on port 60036

Process finished with exit code -1073741819 (0xC0000005)

Мой локальный файл конфигурации выглядит так (ничего особенного):

введите здесь описание изображения

Что я делаю неправильно?

ИЗМЕНИТЬ:

Я посмотрел на шаблон, который WebStorm генерирует с помощью экспресса, чтобы попытаться найти вдохновение, чтобы заставить отладку работать с restify. По сути, сейчас я имитирую шаблон WebStorm, поэтому у меня есть дополнительный файл в bin/wwww:

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('test2:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
//app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
      ? 'Pipe ' + port
      : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
      ? 'pipe ' + addr
      : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

Вместо файла сервера я использую app.js:

var restify = require('restify');

var restifyApp = function () {
    var server = restify.createServer({
        name: 'myapp',
        version: '1.0.0'
    });
    server.use(restify.acceptParser(server.acceptable));
    server.use(restify.queryParser());
    server.use(restify.bodyParser());

    server.get('/echo/:name', function (req, res, next) {
        res.send(req.params);
        return next();
    });
};

module.exports = restifyApp;

С этой настройкой я действительно могу начать в режиме отладки. Однако, как только я пробую http://localhost:3000/echo/hey (в качестве примера), время запроса истекает, и я снова получаю ответ в терминале с сообщением Process finished with exit code -1073741819 (0xC0000005)


person Ebbs    schedule 29.04.2016    source источник
comment
Код выхода -1073741819 — ошибка «нарушение прав доступа»; скорее всего, это проблема Node.js V8. Версия Wgat Node.js, которую вы используете?   -  person lena    schedule 29.04.2016
comment
Я использую 5.2.0. Что-то еще, что я изучаю, это то, что в режиме отладки устанавливается параметр --debug-brk={{PORT}}, однако в моем коде порт жестко запрограммирован на 8080. Я пытался использовать process.env.PORT, но он каждый раз не определено. Возможно ли, что он жалуется, потому что webstorm пытается выполнить отладку на порту, отличном от того, на котором он говорит ему выполнять?   -  person Ebbs    schedule 29.04.2016
comment
порт, который слушает ваш сервер, и порт отладки-brk должны отличаться — последний является портом, который прослушивает отладчик узла. И нет, указанный в --debug-brk порт не имеет абсолютно никакого отношения к этому вопросу.   -  person lena    schedule 29.04.2016
comment
только что проверил: у меня отладка работает при использовании Node 0.10, ломается с AccessViolation с Node 4.3, зависает с Node 5.5... Та же проблема - при использовании node-spector   -  person lena    schedule 29.04.2016
comment
Я столкнулся с похожей проблемой и обновил узел до последней версии (v6.2.0), и это решило мою проблему.   -  person naren    schedule 03.06.2016
comment
спасибо @naren. Попробую в локальной среде разработчиков. К сожалению, компания, в которой я работаю, поддерживает только версию LTS в своих производственных средах.   -  person Ebbs    schedule 03.06.2016


Ответы (1)


Похоже на проблему Node V8 (поскольку отладка также не работает при использовании инспектора узлов). Я смог отладить ваш код после перехода на Node.js 0.10.31. Node 4.3 ломается с AccessViolation, Node 5.5 зависает.

person lena    schedule 04.05.2016