可以通过另一个命令管道调试配置吗?

时间:2013-10-27 01:06:39

标签: console pipe phpstorm

使用PHPStorm 6/7(或者我猜想是WebStorm),是否可以配置调试会话,以便它能够理解并使用管道在PHPStorm控制台中显示更方便的显示?我正在开发一个使用bunyan的nodejs应用程序。我希望PHPStorm能够像在终端上启动应用程序一样打印调试输出。

以下是配置示例:

examle phpstorm debug config

但是它试图运行的命令是:

/usr/local/bin/node --debug-brk=57073 app.js -vv 2>&1 "|" bunyan

如果它不引用管道符号,它可能会起作用,但我不确定。

4 个答案:

答案 0 :(得分:4)

管道是命令行shell的一个功能,PhpStorm不使用shell来启动配置,因此管道和输出重定向将不起作用。

略有相关的问题:

您可以在node周围破解一些包装器shell脚本,并使用它而不是默认的node脚本。您的自定义shell脚本可以以自己的方式解析参数并执行管道。不确定它的效果如何。

答案 1 :(得分:3)

我发现这个问题有一个hacky解决方案,我也遇到过。我的解决方案不包括WebStorm中的任何配置更改。我只是创建了一个使用bunyan CLI工具解析的管道输出,该工具通过节点spawn child_process加载。

代码如下所示:

bunyan = require('bunyan');
logOptions = { name: 'myApp' };

// Activate this logger only for development and leave the original for production
if ( process.env.NODE_ENV === 'development' ) {
    spawn = require('child_process').spawn;
    bunyanCLI = spawn('bunyan', ['--color'], { stdio: ['pipe', process.stdout] });
    logOptions.stream = bunyanCLI.stdin;
} 

log = bunyan.createLogger(logOptions);

答案 2 :(得分:3)

我找到了使用bunyan-prettystream 软件包将buyan登录到WebStorm控制台的更好解决方案。

我正在使用的代码如下:

bunyan = require('bunyan');
logOptions = { name: 'myApp' };

if (process.env.NODE_ENV === 'development') {
  var PrettyStream = require('bunyan-prettystream');
  var prettyStdOut = new PrettyStream();
  prettyStdOut.pipe(process.stdout);
  logOptions.stream = prettyStdOut;
}

log = bunyan.createLogger(logOptions);

答案 3 :(得分:2)

我将节点包装到shell脚本中以实现此目的。 这是脚本:

#!/usr/bin/env bash

node $@ | ./node_modules/.bin/bunyan

您永远不需要修改代码库以便在IDE中进行断点调试。

要使用它,只需修改运行配置即可将此脚本用作Node interpreter