首页 文章

Meteor:在服务器端调试

提问于
浏览
78

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

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

Update: I found the following procedure works on my Linux machine:

  • 当你运行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

  • 您需要在process2上发送kill -s USR1

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

在我第一次尝试时,我修改/ 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 回答

  • 3

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

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

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

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

    Update

    从Meteor 1.0开始,你可以输入

    meteor debug
    

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

    Update

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

    meteor shell
    
  • 6

    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 告诉您运行什么 .

  • 10

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

    • 打开/usr/lib/meteor/app/meteor/run.js

    • 之前

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

    nodeOptions.push('--debug');
    

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

    • 在这里使用'--debug-brk'而不是'--debug',因为我更容易使用eclipse作为调试器附加node.js .

    • 在要调试的代码中添加'debugger;' . (我个人更喜欢这种方式)

    • 在控制台中运行meteor

    • 附加到eclipse中的node.js(V8工具,附加到localhost:5858)

    • 运行,等待调试器被命中

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

  • 3

    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; 的位置,它将在打开检查器的客户端或服务器浏览器窗口中断 .

  • 16

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

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

    meteor debug
    

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

    Open Chrome to the address it gives you. 您可能需要安装https://github.com/node-inspector/node-inspector(它现在可能与Meteor捆绑在一起?不确定)

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

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

    Open the local address of your app . 这将运行您的服务器端代码,您应该能够达到您的断点!

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

  • 2

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

  • 88

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

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

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

  • 10

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

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

  • 4

    对于流星1.3.5.2,运行

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

  • 4

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

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

  • 7

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

    • 在项目文件夹中,添加智能包 server-eval
    mrt add server-eval
    

    对于流星1.0:

    meteor add gandev:server-eval
    
    • 重启meteor .

    • here下载 crx Chrome扩展程序文件 .

    • 在Chrome中打开扩展程序页面,然后将 crx 文件拖到扩展程序页面 .

    • 重新启动Chrome .

    • 检查Web检查器以获取eval服务器端代码:

    enter image description here

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

  • 5

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

相关问题