【问题标题】:Creating a NodeJS + Redis app causes an error with Exit code 139创建 NodeJS + Redis 应用程序导致错误退出代码 139
【发布时间】:2012-12-16 11:33:34
【问题描述】:

我的app.js有以下内容:

var express = require('express')
  , http = require('http')
  , path = require('path')
  , redis = require('redis')
  , client = redis.createClient();

var app = express();

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser('your secret here'));
    app.use(express.session());
    app.use(app.router);
    app.use(require('stylus').middleware(__dirname + '/public'));
    app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

require('./routes')(app);

client.on("connect", function () {
    console.log("Client on connect");
});


http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

我正在尝试使用node_redis 库来连接Redis 实例。 Node.js 和 Redis 都安装在本地。我想指出的一件事是我创建并尝试使用 Jetbrains 的 Webstorm 运行这个项目(因为我想要一个为我提供一些调试功能的 IDE)。字符串“连接时的客户端”已记录到控制台,但我的应用程序几乎每次都因'Process finished with exit code 139' 而崩溃。我尝试通过命令行运行该应用程序,该应用程序没有崩溃。最糟糕的是,当应用程序无法在 Webstorm 中运行时,没有任何类型的堆栈跟踪。有没有人知道问题是什么,或者我在哪里可以找到有关此错误代码记录的更多信息?

另外,为了让我们在同一个页面上:我的 Redis 服务器已启动并正在运行,并从另一个自定义 web 应用程序接收持续的数据流。我能够启动 redis-cli,并验证 Redis 是否确实包含任何数据。

【问题讨论】:

  • 您找到解决方法了吗?我看到没有给出答案。

标签: javascript node.js redis


【解决方案1】:

如果您使用的是 Unix 类型的操作系统,则 139 表示“128 + 您的 Node 进程崩溃的信号编号”。所以在你的情况下,那个信号是 11,在大多数 Unices 上意味着 SIGSEGV。换句话说:Node 进程因某种无效的内存引用而崩溃。

根据我的经验,当您在从 IDE(或其他应用程序)启动进程时遇到此类错误时,通常意味着 IDE 正在传递某种导致崩溃的环境。您可以尝试将 GDB 附加到正在运行的 Node 进程(但在连接到它之前会导致崩溃)以找出导致它的原因。

另一个解决方案:如果您可以更改 Webstorm 将启动的节点可执行文件,您可以尝试制作一个包装 Node 并打印一些调试信息的 shell 脚本。像这样的东西:

#!/bin/sh

echo "ENVIRONMENT: $ENV"
sleep 1
/path/to/actual/node "$@"

这将输出传递给 Node 可执行文件的环境变量。从那里,您可以尝试取消设置任何看起来可疑的变量:

unset STRANGE_VARIABLE

在启动 Node 可执行文件之前,将它们放在上面的脚本中。

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 2021-04-16
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2016-09-13
    相关资源
    最近更新 更多