如何在 Meteor 的服务器端调试和记录自己的代码?
Posted
技术标签:
【中文标题】如何在 Meteor 的服务器端调试和记录自己的代码?【英文标题】:How to debug and log own code on the server side of Meteor? 【发布时间】:2012-09-09 01:18:53 【问题描述】:没关系。这不起作用的原因:我忘了meteor reset
所以debugger
没有机会停下来。呵呵!
更多信息:我正在使用 Mason Chang 对相关问题的回答中的方法,而不是 kill -s USR1 [proc_id]
(我可以在其中看到脚本,但无法在 startup() 函数中停止。)。另外,我正在使用陨石。
我正在尝试使用节点检查器在 Meteor 服务器端(即在/server
下)调试Meteor.startup(function ()) 代码,我已阅读此question,并按照更改run.js
的答案,但不知何故,我自己的启动功能脚本没有出现在 Chrome 的脚本部分。
如何在此处查看我的代码并设置断点并在这些点处停止?顺便说一句,Meteor_debug() 不会向标准输出、标准错误或节点检查器浏览器控制台输出任何内容。我也试过 console.log() 无济于事。如何在 Meteor 服务器端启用日志记录?
如果重要的话,我在auth
分支。
这里的代码很简单(/server/bootstrap.js):
Meteor.startup(function ()
if (Logs.find().count() === 0)
var data = [/*...some data...*/];
var timestamp = (new Date()).getTime();
Meteor._debug("timestamp: "+timestamp+", data.len: " + data.length);
debugger;
for (var i = 0; i < data.length; i++)
data[i].timestamp = timestamp++;
var entry_id = Logs.insert(data[i]);
Meteor._debug("entry_id: "+ entry_id);
);
【问题讨论】:
【参考方案1】:既然我知道如何做到这一点,我将回答我自己的问题,以便我们可以在此处保留此信息(详细信息):(这是基于 Mason Chang 对此question 的回答。)
-
停止流星执行。
编辑
/usr/lib/meteor/app/meteor/run.js
(或HOME//.meteorite/meteors/meteor/meteor/[LONG_HEX_CODE]/app/meteor
中陨石安装的对应run.js
):
换行[path.join(bundle_path, 'main.js'), '--keepalive']
到['--debug-brk', path.join(bundle_path, 'main.js'), '--keepalive']
//--debug-brk 使新线程在第一行中断;
在您的服务器代码中添加debugger
语句作为断点;
在服务器终端中运行node-inspector &
。 (谷歌“node-inspector”来安装它。)
跑流星; (这不会附加调试器,因为还没有服务器线程,如果您没有打开客户端窗口。)
刷新客户端浏览器窗口; (启动将在第一行中断的服务器线程,并附加到node-inspector
。)
在 [SERVER:8080] 打开浏览器窗口,您的服务器代码在第一行停止(main.js
在您的[PROJECT_DIR]/.meteor/local/build
);
在调试器浏览器窗口中点击 RUN 按钮;根据您的 debugger
语句所在的位置,您可能必须在客户端浏览器窗口中执行一些触发操作才能运行到 debugger
断点。 (请注意,如果您等待太久才按下 RUN 按钮,您的客户端窗口可能会超时,您必须再次刷新。)
现在您可以在服务器调试器窗口中进行常规调试:单步调试、观察变量、在控制台中执行、查看堆栈等。
编辑:要在服务器端登录,您可以使用 Meteor._debug() 和 console.log(),它们将显示在您运行 meteor
的终端中。在客户端,这些日志记录语句将输出到浏览器开发人员的控制台。工具。
【讨论】:
由于 Meteor 现在支持--debug
和 --debug-brk
,这个 hack 是否仍然适用?
@Brandon:现在事情容易多了。请参阅Debugging in the Unofficial meteor FAQ(感谢 Kasima Tharnpipitchai)。希望启超能更新答案。【参考方案2】:
在 MacOSX 上,您可以与 Chrome 一起使用:
NODE_OPTIONS="--debug-brk" meteor
在另一个终端中
node-inspector --debug-port=5858 --web-port=12345
然后将 Chrome 连接到 127.0.0.1:12345/debug?port=5858
否则使用 Webstorm,只需创建一个 Node.js 远程调试配置并运行它:
名称:流星 主机:127.0.0.1 端口 5858请注意,一旦服务器启动,您需要按运行以加载 Meteor,然后暂停以便从服务器控制台进行调试。
【讨论】:
以上是关于如何在 Meteor 的服务器端调试和记录自己的代码?的主要内容,如果未能解决你的问题,请参考以下文章