NodeJS断点有时无法正常工作

时间:2016-02-02 10:21:13

标签: javascript node.js debugging intellij-idea ecmascript-6

我们正在使用--harmony命令行标志构建NodeJS 5.5.0应用程序以启用ES6。它是一个非常简单的API代理应用程序,因此除了API响应本身之外没有数据层或前端。该应用程序与connect捆绑在一起,使用Swagger作为API本身。我正在使用IntelliJ 15,除了调试未能始终如一地达到我的断点之外,一切都运行良好。我发现这非常令人沮丧并浪费了开发时间 - 也许我在这里错过了一些新的Node环境?

以下是我的具体示例:

app.js:

// requires here

swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) {

// Interpret Swagger resources and attach metadata to request
app.use(middleware.swaggerMetadata());

// Validate Swagger requests
app.use(middleware.swaggerValidator());

// Route validated requests to appropriate controller
app.use(middleware.swaggerRouter(options));

// Serve the Swagger documents and Swagger UI
app.use(middleware.swaggerUi());

// Start the server
http.createServer(app).listen(serverPort, function () {
  console.log('Server is listening on port %d', serverPort);
    });
});
module.exports = app;

然后我们使用的变换器object-mapper在每个API调用上运行:

transformer.js:

'use strict';
(function () {

    var util = require('util');

    //==> breakpoint #1 on the line below, successfully hit when the app launches
    module.exports = function (req, res, data, next) {

        console.log('GOT HERE!');

        //==> breakpoint #2 on the line below never hit but app hangs here
        var operation = req.swagger.operation;

        // more code here
    };
}).call(this);

断点#1在应用程序启动时始终有效,我跳过它并拨打电话然后“GOT HERE!”按照我的预期在控制台中打印。应用程序无限期挂起,但我无法检查任何变量,并且IDE没有注册它已经达到了断点。我们使用node-inspector,Chrome工具和本机交互式节点调试器在IDE外部对此进行了测试,但存在同样的问题。我还在Node 4和5的多个版本上测试过它。

我们不得不暂时用函数包装器包装大部分文件,因为我们正在使用毯子进行代码覆盖,如果没有这个,它就无法工作。我已经尝试删除上面的transformer.js中的函数包装器,但是调试器仍然没有遇到断点#2。

任何人都可以提供一些见解,因为我没有想法吗?

1 个答案:

答案 0 :(得分:0)

我找到了原因。似乎Node调试器在遇到util.inspect()的任何行时会出现潜在的错误,它将挂起。

我已经确认这是最新版本的Node 4.2.6和5.5.0以及每晚构建5.5.1和6.0.0的问题。

请参阅https://github.com/nodejs/node/issues/4906