78

有谁知道调试服务器端代码的好方法?我尝试启用 Node.js 调试然后使用节点检查器,但它没有显示我的任何代码。

我最终使用了 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在命令提示符下运行。这只会在 process1 上放置 --debug 标志,所以我只能在 node-inspector 上看到流星文件并且找不到我的代码。

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

4

12 回答 12

88

在 Meteor 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
于 2013-02-22T10:20:59.337 回答
16

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

NODE_OPTIONS环境变量值示例:

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

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

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

于 2013-02-14T11:07:28.807 回答
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 ”。

于 2012-07-29T13:15:22.740 回答
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;调用的位置,它会在您打开检查器的客户端或服务器浏览器窗口上中断。

于 2015-02-18T00:56:57.640 回答
7

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

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

meteor debug

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

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

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

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

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

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

于 2015-11-02T16:11:37.287 回答
6

As of Meteor 1.0.2 probably the best way for server-side debugging is directly via the new built-in shell: with running server run meteor shell. More info here: https://www.meteor.com/blog/2014/12/19/meteor-102-meteor-shell

于 2015-01-29T05:19:26.710 回答
5

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

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

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

于 2012-06-14T18:21:35.383 回答
4

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

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

于 2013-12-14T10:07:24.383 回答
4

对于流星 1.3.5.2,运行

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

于 2017-01-05T11:14:31.317 回答
3

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

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

    mrt add server-eval
    

    对于流星 1.0:

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

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

    在此处输入图像描述

与节点检查器相比,我的输出更清晰。

于 2014-07-01T23:11:03.363 回答
3

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

我已经在 Windows 上对其进行了测试,并且配置很轻松 - 请参阅我的答案

于 2014-02-12T02:03:00.120 回答
2

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

于 2014-11-18T17:44:46.227 回答