Meteor:在服务器端调试

use*_*682 78 debugging server-side meteor

有谁知道调试服务器端代码的好方法?我尝试启用Node.js调试然后使用node-inspector但它没有显示我的任何代码.

我最终使用console.log,但效率非常低.

更新:我发现以下过程适用于我的Linux机器:

  1. 当你运行Meteor时,它会产生两个进程

    process1:/ usr/lib/meteor/bin/node /usr/lib/meteor/app/meteor/meteor.js

    process2:/ usr/lib/meteor/bin/node /home/paul/codes/bbtest_code/bbtest02/.meteor/local/build/main.js --keepalive

  2. 你需要在process2上发送kill -s USR1

  3. 运行node-inspector,您可以看到您的服务器代码

在我第一次尝试时,我修改/ usr/lib/meteor/bin/meteor中meteor启动脚本的最后一行

exec "$DEV_BUNDLE/bin/node" $NODE_DEBUG "$METEOR" "$@"
Run Code Online (Sandbox Code Playgroud)

NODE_DEBUG=--debug meteor在命令提示符下运行.这只在process1上放了--debug标志,所以我只在node-inspector上看到meteor文件,但找不到我的代码.

有人可以在Windows和Mac机器上检查这个吗?

San*_*ker 88

在Meteor 0.5.4中,这变得更加容易:

首先从终端运行以下命令:

npm install -g node-inspector
node-inspector &
export NODE_OPTIONS='--debug-brk'
meteor
Run Code Online (Sandbox Code Playgroud)

然后http://localhost:8080在浏览器中打开以查看节点检查器控制台.

更新

从Meteor 1.0开始,你可以输入

meteor debug
Run Code Online (Sandbox Code Playgroud)

这实际上是上述命令的快捷方式,然后如上所述在浏览器中启动节点检查器.

更新

在Meteor 1.0.2中添加了一个控制台或shell.在服务器上输出变量和运行命令可能会派上用场:

meteor shell
Run Code Online (Sandbox Code Playgroud)

  • "meteor debug"在Meteor 1.1.0.2上做了这个技巧.谢谢. (3认同)

小智 16

Meteor应用程序是Node.js应用程序.使用该meteor [run]命令运行Meteor应用程序时,可以NODE_OPTIONS环境变量配置为node以调试模式启动.

NODE_OPTIONS环境变量值的示例:

  • --debug
  • --debug=47977 - 指定一个端口
  • --debug-brk - 打破第一个声明
  • --debug-brk=5858 - 在第一个语句中指定端口和中断

如果您export NODE_OPTIONS=--debug,meteor从同一shell运行的所有命令都将继承环境变量.或者,您可以使用一次运行启用调试NODE_OPTIONS="--debug=47977" meteor.

要进行调试,请node-inspector在不同的shell中运行,然后转到http://localhost:8080/debug?port=<the port you specified in NODE_OPTIONS>,无论是什么node-inspector告诉您运行.


Mas*_*ang 10

要在调试模式下启动node.js,我这样做了:

  1. 打开/usr/lib/meteor/app/meteor/run.js
  2. 之前

    nodeOptions.push(path.join(options.bundlePath, 'main.js')); 
    
    Run Code Online (Sandbox Code Playgroud)

    nodeOptions.push('--debug');
    
    Run Code Online (Sandbox Code Playgroud)

以下是附加调试器eclipse的其他实用步骤:

  1. 在这里使用'--debug-brk'而不是'--debug',因为我更容易使用eclipse作为调试器附加node.js.
  2. 添加'调试器;' 在您要调试的代码中.(我个人更喜欢这种方式)
  3. 在控制台中运行流星
  4. 附加到eclipse中的node.js(V8工具,附加到localhost:5858)
  5. 运行,等待调试器被命中

当您在meteor app文件夹中启动meteor时,您将在控制台中看到" 调试器在端口5858上侦听 ".


fer*_*lis 10

On Meteor 1.0.3.1(更新到Sergey.Simonchik答案)

启动你的服务器 meteor run --debug-port=<port-number>

点浏览器 http://localhost:6222/debug?port=<port-number>

<port-number>您指定的端口在哪里.

在您的代码中添加debugger;您要设置断点的位置.

根据debugger;调用的位置,它将在打开检查器的客户端或服务器浏览器窗口中断.


Sab*_*ett 7

我喜欢通过GUI设置断点.这样我就不必记得从我的应用程序中删除任何调试代码.

这就是我设法为我的本地流星应用程序做服务器端的方法:

meteor debug
Run Code Online (Sandbox Code Playgroud)

以这种方式启动你的应用.

将Chrome打开到其提供的地址.您可能需要安装https://github.com/node-inspector/node-inspector(它现在可能与Meteor捆绑在一起?不确定)

你会看到一些奇怪的内部流星代码(不是你写的应用程序代码).按播放以运行代码.此代码只是启动服务器以侦听连接.

只有在按下播放后,您才会在调试器文件夹结构中看到名为"app"的新目录.在你的流星项目文件中.在那里设置一个你想要的断点.

打开应用的本地地址.这将运行您的服务器端代码,您应该能够达到您的断点!

注意:您必须重新打开检查器,并在每次重新启动应用程序时再次执行此过程!


Chr*_*itz 6

从Meteor 1.0.2开始,服务器端调试的最佳方式可能是直接通过新的内置shell:运行服务器运行meteor shell.更多信息:https://www.meteor.com/blog/2014/12/19/meteor-102-meteor-shell


Nac*_*ket 5

我不确定为什么它不适合你.
我可以按照控制台(Mac)上的步骤使用它.

$ ps  
$ kill -s USR1 *meteor_node_process_id*  
$ node-inspector &
Run Code Online (Sandbox Code Playgroud)

以上步骤在https://github.com/dannycoates/node-inspector上提到.它用于将node-inspector附加到运行节点进程.