如何在 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 &amp;。 (谷歌“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 的服务器端调试和记录自己的代码?的主要内容,如果未能解决你的问题,请参考以下文章

Meteor:在服务器端调试

您如何在 Meteor 中存储特定于客户端的数据服务器端?

流星服务器端断点从未在 cloud9 中命中

如何实现使用fiddler对手机https 进行抓包

Meteor - 如何在特定时间段后从服务器端方法中自动从集合中删除单个项目?

Meteor + React:服务器端路由?