提问人:user1416682 提问时间:6/14/2012 最后编辑:Dan Dascalescuuser1416682 更新时间:1/5/2017 访问量:34457
Meteor:在服务器端调试
Meteor: Debug on server side
问:
有谁知道调试服务器端代码的好方法? 我尝试启用Node.js调试然后使用 node-inspector,但它没有显示我的任何代码。
我最终使用了console.log但这效率非常低。
更新:我发现以下过程适用于我的 Linux 机器:
当你运行 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 上发送 kill -s USR1
运行 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 机器上检查一下吗?
答:
我不确定为什么它对你不起作用。
我可以通过在控制台 (Mac) 上按照步骤使用它。
$ ps
$ kill -s USR1 *meteor_node_process_id*
$ node-inspector &
上述步骤在 https://github.com/dannycoates/node-inspector 中提到。它用于将 node-inspector 附加到正在运行的节点进程。
评论
debugger
ps | grep node
为了在调试模式下启动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”。
评论
/usr/lib
/usr/local/
/usr/local/meteor/app/meteor/run.js
/usr/lib/meteor/app/meteor/run.js
流星应用程序是Node.js应用程序。使用该命令运行 Meteor 应用程序时,您可以将 NODE_OPTIONS
环境变量配置为调试模式下的启动节点
。meteor [run]
环境变量值示例:NODE_OPTIONS
--debug
--debug=47977
- 指定端口--debug-brk
- 在第一个语句上中断--debug-brk=5858
- 在第一个语句上指定端口和中断
如果 ,则从同一 shell 运行的所有命令都将继承环境变量。或者,可以只为一次运行启用调试,使用 。export NODE_OPTIONS=--debug
meteor
NODE_OPTIONS="--debug=47977" meteor
若要调试,请在不同的 shell 中运行,然后转到 ,而不管什么要求你运行。node-inspector
http://localhost:8080/debug?port=<the port you specified in NODE_OPTIONS>
node-inspector
在 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
评论
meteor
console.log('asd') [object Object]
meteor debug
我写了一个名为 meteor-inspector 的小型 meteor 包,它简化了使用 node-inspector 调试 meteor 应用程序的过程。它在内部管理 node-inspector 的生命周期,因此,用户无需在更改某些文件后手动重新启动调试器。
有关更多详细信息和具体使用说明,请查看 https://github.com/broth-eu/meteor-inspector。
WebStorm 是面向开源开发人员免费的强大 IDE,它使服务器端调试变得更加容易。
我已经在 Windows 上测试过了,配置很轻松 - 请参阅我的答案。
解决我问题的检查器是流星服务器控制台。这是我安装它的过程:
在项目文件夹中,添加智能包:
server-eval
mrt add server-eval
对于 Meteor 1.0:
meteor add gandev:server-eval
重启流星。
- 从这里下载Chrome扩展文件。
crx
- 在Chrome中打开扩展程序页面,然后将文件拖到扩展程序页面。
crx
- 重新启动 Chrome。
查看 Web 检查器以评估服务器端代码:
与node-inspector相比,我的输出更清晰。
评论
如果您更喜欢使用 nodeJS 的官方调试器,您可以调用 然后(在不同的 shell 上)。NODE_OPTIONS='--debug' meteor
node debug localhost:5858
从 Meteor 1.0.2 开始,服务器端调试的最佳方式可能是直接通过新的内置 shell:运行 server run 。更多信息在这里: https://www.meteor.com/blog/2014/12/19/meteor-102-meteor-shellmeteor shell
在 Meteor 1.0.3.1 上(更新到 Sergey.Simonchik 答案)
启动服务器meteor run --debug-port=<port-number>
将浏览器指向http://localhost:6222/debug?port=<port-number>
您指定的端口在哪里。<port-number>
在代码中,添加要设置断点的位置。debugger;
根据调用的位置,它将在打开检查器时在客户端或服务器浏览器窗口中断。debugger;
我喜欢通过 GUI 设置断点。这样,我就不必记得从我的应用程序中删除任何调试代码。
这就是我设法为我的本地流星应用程序在服务器端做到这一点的方式:
meteor debug
以这种方式启动您的应用程序。
打开 Chrome,找到它为您提供的地址。您可能需要安装 https://github.com/node-inspector/node-inspector(它现在可能与 Meteor 捆绑在一起?不确定)
你会看到一些奇怪的内部流星代码(不是你写的应用代码)。按 play 运行代码。此代码只是启动服务器以侦听连接。
只有在按“播放”后,你才会在调试器文件夹结构中看到一个名为“app”的新目录。里面有你的流星项目文件。在您想要的一行中设置一个断点。
打开应用的本地地址。这将运行您的服务器端代码,您应该能够命中断点!
注意:每次应用程序重新启动时,您必须重新打开检查器并再次执行此过程!
对于 Meteor 1.3.5.2,运行
流星调试 --debug-port 5858+n n 是一个非零数字,这将导致 node-inspector 使用 8080+n 作为 Web 端口。
下一个:分页:服务器端还是客户端?
评论