Meteor:在服务器端调试

Meteor: Debug on server side

提问人:user1416682 提问时间:6/14/2012 最后编辑:Dan Dascalescuuser1416682 更新时间:1/5/2017 访问量:34457

问:

有谁知道调试服务器端代码的好方法? 我尝试启用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. 您需要在进程 2 上发送 kill -s USR1

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

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

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

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

有人可以在 Windows 和 Mac 机器上检查一下吗?

调试 Meteor 服务器端

评论

0赞 Nachiket 6/16/2012
看看我的答案,在MAC上它正在工作,我能够看到并调试我的js文件。
1赞 Gezim 7/5/2012
我在我的 Mac 上尝试过这个,但没有成功。
6赞 Josh 6/15/2012
仅供参考,而不是console.log,使用Meteor._debug(它最终调用console.log,但有一条注释说它有一天会得到改进。
1赞 Kevin 8/31/2013
你@Harmal000链接到这个问题 - 你是想链接到另一个问题吗?
0赞 Julien Leray 9/23/2015
本文对于在 meteor.js joshowens.me/easily-debugging-meteor-js 中进行调试非常有用

答:

5赞 Nachiket 6/15/2012 #1

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

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

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

评论

0赞 Nachiket 7/5/2012
我只在 Mac 上测试过,你用的是 Mac 吗?
0赞 Gezim 7/10/2012
是的,我有一台 Mac。如何在代码中添加断点?你在整个事情中使用的确切步骤是什么?
0赞 Nachiket 7/11/2012
在上述(这个答案的)步骤之后,我启动检查器。$ node-inspector 并在 chrome 中打开了 127.0.0.1:8080/debug?port=5858。我能够在webkit-inspector的源选项卡中看到我的文件
1赞 Jakub Arnold 10/27/2012
我试过了这个,在检查器中添加了两个断点和断点,但它们都不起作用。知道为什么吗?debugger
0赞 quinn 2/26/2013
当查看(或类似)时,请确保选择main.js pid 发出信号,而不是它的父节点进程。这就是我让它工作的方式。ps | grep node
10赞 Mason Zhang 7/29/2012 #2

为了在调试模式下启动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. 在要调试的代码中添加“debugger;”。(我个人更喜欢这种方式)
  3. 在控制台中运行 Meteor
  4. 在 eclipse 中附加到 node.js(V8 工具,附加到 localhost:5858)
  5. 运行,等待调试器被命中

当您在 Meteor App 文件夹中启动 Meteor 时,您将在控制台中看到“调试器侦听端口 5858”。

评论

0赞 Jameson Quinn 8/21/2012
如果你使用的是捷运,那么run.js的路径当然是不同的。
0赞 Jameson Quinn 8/21/2012
...如 ~/.meteorite/meteors/meteor/0a148c69d6af9832006a6f6d27cc112ed90cb3e4/app/meteor/
0赞 zVictor 10/11/2012
我的文件因未知原因被重复。如果它对你不起作用,请尝试编辑而不是/usr/lib/usr/local//usr/local/meteor/app/meteor/run.js/usr/lib/meteor/app/meteor/run.js
0赞 zVictor 10/11/2012
谢谢,您的解决方案是我找到的最简单的解决方案。它不需要终止进程,也不需要在命令行上设置变量。
16赞 Sergey.Simonchik 2/14/2013 #3

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

环境变量值示例:NODE_OPTIONS

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

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

若要调试,请在不同的 shell 中运行,然后转到 ,而不管什么要求你运行。node-inspectorhttp://localhost:8080/debug?port=<the port you specified in NODE_OPTIONS>node-inspector

88赞 Sander van den Akker 2/22/2013 #4

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

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

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

然后在浏览器中打开以查看 node-inspector 控制台。http://localhost:8080

更新

从 Meteor 1.0 开始,您只需输入即可

meteor debug

这本质上是上述命令的快捷方式,然后如前所述在浏览器中启动 Node Inspector。

更新

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

meteor shell

评论

1赞 Andrew Barber 2/22/2013
感谢您发布您的答案!请务必仔细阅读有关自我推销的常见问题。另请注意,每次链接到自己的网站/产品时,都需要发布免责声明。
1赞 fuzzybabybunny 6/30/2014
如何禁用此调试器?每次我运行这个调试器时,都会运行并锁定我的流星应用程序,使其无法在客户端运行任何内容。meteor
0赞 sites 7/2/2014
console 输出始终 [object Object],例如:console.log('asd') [object Object]
1赞 sites 7/2/2014
是否可以打印值?如何?
0赞 Tony Brix 7/25/2015
是否有任何关于 .我找不到设置断点的代码。meteor debug
4赞 broth-eu 12/14/2013 #5

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

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

3赞 Dan Dascalescu 2/12/2014 #6

WebStorm 是面向开源开发人员免费的强大 IDE,它使服务器端调试变得更加容易。

我已经在 Windows 上测试过了,配置很轻松 - 请参阅我的答案

3赞 sites 7/2/2014 #7

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

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

    mrt add server-eval
    

    对于 Meteor 1.0:

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

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

    enter image description here

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

评论

0赞 sites 12/19/2014
据我所知,它适用于断点,但我不确定。
0赞 Sabrina Leggett 12/19/2014
你还记得你是如何设置它们的吗?通过开发工具还是代码?
0赞 sites 12/19/2014
开发工具,但不记得具体是怎么回事
2赞 Tomas Romero 11/19/2014 #8

如果您更喜欢使用 nodeJS 的官方调试器,您可以调用 然后(在不同的 shell 上)。NODE_OPTIONS='--debug' meteornode debug localhost:5858

6赞 Christian Fritz 1/29/2015 #9

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

10赞 ferndopolis 2/18/2015 #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赞 Sabrina Leggett 11/3/2015 #11

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

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

meteor debug

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

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

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

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

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

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

4赞 user7378851 1/5/2017 #12

对于 Meteor 1.3.5.2,运行

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