流星:在服务器端调试


78

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

我最终使用console.log,但这效率很低。

更新:我发现以下过程可在我的Linux机器上运行:

  1. 当您运行Meteor时,它将产生两个进程

    进程1:/ usr / lib / meteor / bin / node /usr/lib/meteor/app/meteor/meteor.js

    进程2:/ 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中的流星启动脚本的最后一行修改为

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

NODE_DEBUG=--debug meteor在命令提示符下运行。这仅将--debug标志放在process1上,因此我只能在node-inspector上看到流星文件,而找不到我的代码。

有人可以在Windows和Mac计算机上检查吗?


6
仅供参考,而不是console.log,请使用Meteor._debug(最终会调用console.log,但有一条注释说它将在某一天得到改善。)
Josh

看到我的答案,在MAC上它正在工作,我能够查看和调试我的js文件。
Nachiket

1
我在Mac上尝试了此操作,但没有成功。
Gezim

1
@ Harmal000您链接到此问题-您是要链接到另一个问题吗?
凯文

本文对在meteor.js中进行调试非常有用joshowens.me/easily-debugging-meteor-js
Julien Leray

Answers:


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中,添加了一个控制台或外壳。在服务器上输出变量并运行命令可能会派上用场:

meteor shell

1
感谢您发布答案!请务必仔细阅读有关自我促销常见问题解答。另请注意,每次链接到您自己的站点/产品,您都必须发布免责声明。
Andrew Barber

谢谢,我不知道!
Sander van den Akker

1
如何禁用此调试器?每次我运行meteor此调试器时,都会运行并锁定流星应用程序,使其不运行任何客户端。
Fuzzybabybunny 2014年

控制台始终输出[object Object],例如:console.log('asd') [object Object]
网站

1
是否可以打印值?怎么样?
网站

16

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

NODE_OPTIONS环境变量值的示例:

  • --debug
  • --debug=47977 -指定端口
  • --debug-brk -打破第一条陈述
  • --debug-brk=5858 -指定端口并在第一条语句上中断

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

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


10

要以调试模式启动node.js,我采用了这种方式:

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

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

    nodeOptions.push('--debug');
    

这是附加调试器Eclipse的其他实际步骤:

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

当您在流星应用程序文件夹中启动流星时,您会在控制台中看到“调试器侦听端口5858 ”。


如果您使用的是MRT,则run.js的路径当然是不同的。
詹姆森·奎因

...如〜/ .meteorite / meteors / meteor / meteor / 0a148c69d6af9832006a6f6d27cc112ed90cb3e4 / app / meteor /
Jameson Quinn

我的文件被复制的/usr/lib/usr/local/未知的原因。如果对您不起作用,请尝试编辑/usr/local/meteor/app/meteor/run.js而不是/usr/lib/meteor/app/meteor/run.js
zVictor 2012年

谢谢,您的解决方案是我发现过的最简单的方法。它不需要杀死进程,也不需要在命令行上设置变量。
zVictor 2012年

10

在Meteor 1.0.3.1上(更新为Sergey.Simonchik答案)

使用以下命令启动服务器 meteor run --debug-port=<port-number>

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

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

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

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


7

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

这是我设法在本地流星应用程序的服务器端完成此操作的方法:

meteor debug

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

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

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

只有在按下play之后,您才会在调试器文件夹结构中看到一个名为“ app”的新目录。其中有您的流星项目文件。在所需的行中设置一个断点。

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

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



5

我不确定为什么它对您不起作用。
我可以按照控制台(Mac)上的步骤使用它。

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

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


我仅在Mac上进行过测试,您正在使用Mac吗?
Nachiket

是的,我有一台Mac。如何在代码中添加断点?您整件事使用的确切步骤是什么?
Gezim

完成上述(此答案)的步骤后,我启动了检查器。$ node-inspector并在Chrome中打开了127.0.0.1:8080/debug?port=5858。我能够在webkit-inspector的“源”选项卡中看到我的文件
Nachiket 2012年

1
我已经尝试过,debugger在检查器中同时添加和断点,但是它们都不起作用。知道为什么吗?
雅各布·阿诺德

当查看ps | grep node(或类似结果)时,请确保选择main.js pid作为信号,而不是父节点进程。这就是我如何使其工作。
奎因,

4

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

有关更多详细信息和具体用法说明,请参见https://github.com/broth-eu/meteor-inspector


4

对于流星1.3.5.2,运行

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



3

流星服务器控制台是解决我的问题的检查器。这是我遵循的安装过程:

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

    mrt add server-eval
    

    对于Meteor 1.0:

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

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

    在此处输入图片说明

与node-inspector相比,我的输出更清晰。


从我记得它在断点上起作用,但是我不确定。
网站

您还记得如何设置它们吗?通过开发工具还是incode?
Sabrina Leggett 2014年

开发工具,但不记得具体如何
网站

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.