创build一个NodeJS + Redis应用程序导致与退出代码139错误

我的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都在本地安装。 我想指出的一件事是我创build了,并试图用Jetbrains的Webstorm运行这个项目(因为我想要一个IDE,它提供了一些debugging)。 string“连接上的客户端”被logging到控制台,但我的应用程序几乎崩溃每一次'Process finished with exit code 139' 。 我试图通过命令行运行应用程序,并且应用程序不会崩溃。 最糟糕的是,当应用程序无法在Webstorm中运行时,没有任何堆栈跟踪。 有没有人有任何线索是什么问题或在哪里可以find更多的信息logging有关此错误代码?

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

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

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

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

 #!/bin/sh echo "ENVIRONMENT: $ENV" sleep 1 /path/to/actual/node "$@" 

这将输出传递给Node可执行文件的环境variables。 从那里,你可以尝试和取消任何可疑的variables:

 unset STRANGE_VARIABLE 

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