Meteor:在服务器端调试

时间:2012-06-14 14:11:12

标签: debugging meteor server-side

有谁知道调试服务器端代码的好方法? 我尝试启用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,您可以看到您的服务器代码

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

    exec "$DEV_BUNDLE/bin/node" $NODE_DEBUG "$METEOR" "$@"
    

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

    有人可以在Windows和Mac机上查看吗?

12 个答案:

答案 0 :(得分:88)

在流星0.5.4中,这变得容易多了:

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

npm install -g node-inspector
node-inspector &
export NODE_OPTIONS='--debug-brk'
meteor

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

<强>更新

自Meteor 1.0起,您只需输入

即可
meteor debug

本质上是上述命令的快捷方式,然后如上所述在浏览器中启动节点检查器。

<强>更新

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

meteor shell

答案 1 :(得分:16)

Meteor应用程序是Node.js应用程序。使用meteor [run]命令运行Meteor应用程序时,您可以configure the NODE_OPTIONS environment variable to start node in debug mode

NODE_OPTIONS环境变量值的示例:

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

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

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

答案 2 :(得分:10)

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

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

    nodeOptions.push(path.join(options.bundlePath, 'main.js')); 
    

    添加

    nodeOptions.push('--debug');
    
  3. 以下是附加调试器eclipse的其他实用步骤:

    1. 使用&#39; - debug-brk&#39;而不是&#39; - 调试&#39;在这里,因为我更容易使用eclipse作为调试器附加node.js。
    2. 添加&#39;调试器;&#39;在您要调试的代码中。(我个人更喜欢这种方式)
    3. 在控制台中运行meteor
    4. 附加到eclipse中的node.js(V8工具,附加到localhost:5858)
    5. 运行,等待调试器被点击
    6. 当你在meteor应用程序文件夹中启动meteor时,你会看到&#34; 调试器正在侦听端口5858 &#34;在控制台中。

答案 3 :(得分: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;的位置,它将在打开检查器的客户端或服务器浏览器窗口中断。

答案 4 :(得分:7)

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

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

meteor debug

以这种方式启动您的应用。

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

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

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

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

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

答案 5 :(得分:6)

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

答案 6 :(得分:5)

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

$ ps  
$ kill -s USR1 *meteor_node_process_id*  
$ node-inspector &

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

答案 7 :(得分:4)

我编写了一个名为 meteor-inspector 的小型流星程序包,它简化了使用node-inspector调试流星应用程序的过程。它在内部管理节点检查器的生命周期,因此,在某些文件发生更改后,用户无需手动重新启动调试器。

有关详细信息和具体使用说明,请查看https://github.com/broth-eu/meteor-inspector

答案 8 :(得分:4)

对于meteor 1.3.5.2,运行

  

meteor debug --debug-port 5858 + n   n是一个非零数字,这将导致节点检查员使用8080 + n作为Web端口。

答案 9 :(得分:3)

WebStorm,对于开源开发人员而言免费的强大IDE,使得调试服务器端变得更加容易。

我在Windows上测试了它,配置很简单 - 请参阅my answer

答案 10 :(得分:3)

解决我的问题的检查员是流星服务器控制台。以下是我安装它的过程:

  1. 在项目文件夹中,添加智能包server-eval

    mrt add server-eval
    

    对于流星1.0:

    meteor add gandev:server-eval
    
  2. 重新启动流星。

  3. here下载crx Chrome扩展程序文件。
  4. 在Chrome中打开扩展程序页面,然后将crx文件拖到扩展程序页面。
  5. 重新启动Chrome。
  6. 检查Web检查器以获取eval服务器端代码:

    enter image description here

  7. 与节点检查员相比,我有更清晰的输出。

答案 11 :(得分:2)

如果您更喜欢使用nodeJS' official debugger,则可以拨打NODE_OPTIONS='--debug' meteor然后(在另一个shell上)node debug localhost:5858