如何在Meteor服务器端调试和记录自己的代码?

9
没事了,之前没有成功的原因是我忘记执行 meteor reset 命令,所以 debugger 没有停下来。唉!
更多信息:我正在使用Mason Chang在一个相关问题中提供的方法,而不是使用 kill -s USR1 [proc_id] 命令(通过该命令,我能看到脚本,但不能在 startup() 函数中停下来)。此外,我正在使用 meteorite。
我试图使用 node-inspector 调试 Meteor 服务器端(即在 /server 目录下)的 Meteor.startup(function ()) 代码。我已经阅读了这个问题,并按照答案修改了 run.js 文件。但是,我的启动函数的脚本在 Chrome 的脚本部分中并没有显示出来。
如何在这里看到我的代码并设置断点,在那些地方停止?顺便说一句,Meteor_debug() 不会输出任何内容到 stdout、stderr 或 node-inspector 浏览器控制台。我也尝试使用 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);
  }
 }
});
2个回答

10

现在我知道如何做,我将回答自己的问题,以便我们可以将此信息(详细信息)保留在这里:(基于 Mason Chang 对此问题的回答 question。)

  1. 停止 Meteor 的执行。
  2. 编辑 /usr/lib/meteor/app/meteor/run.js (或对应的由 meteorite 安装在 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 使新线程在第一行中断;
  3. 在服务器代码中添加 debugger 语句作为断点;
  4. 在服务器终端中运行 node-inspector &。(谷歌“node-inspector”以安装它。)
  5. 运行 meteor;(如果没有客户端窗口打开,这将不会连接调试器。)
  6. 刷新客户端浏览器窗口;(初始化一个服务器线程,该线程将在第一行中断,并连接到 node-inspector。)
  7. 在 [SERVER:8080] 打开浏览器窗口,您的服务器代码停留在第一行(在您的 [PROJECT_DIR]/.meteor/local/build 中的 main.js);
  8. 点击调试器浏览器窗口上的“RUN”按钮;根据您的 debugger 语句位置,您可能需要在客户端浏览器窗口中执行某些触发操作以运行到 debugger 断点。(请注意,如果等待太长时间才按下 RUN 按钮,则客户端窗口可能会超时,您需要再次刷新。)
  • 现在你可以在服务器调试器窗口中执行通常的调试操作:逐步执行、观察变量、在控制台中执行、查看堆栈等。
  • 编辑:对于服务器端的日志记录,您可以使用Meteor._debug()和console.log(),它们将显示在运行meteor的终端中。在客户端,这些日志语句将输出到您的浏览器开发工具的控制台中。


    这个hack是否仍然适用,因为Meteor现在已经支持--debug--debug-brk了? - Brandon
    3
    @Brandon: 现在情况好多了。请参考Kasima Tharnpipitchai撰写的《非官方Meteor常见问题解答》中的调试部分。希望Qichao能更新回答。 - Dan Dascalescu

    3
    在 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远程调试配置并运行:

    名称:Meteor
    主机:127.0.0.1
    端口:5858
    

    请注意,一旦服务器已启动,您需要按运行按钮以加载Meteor,然后暂停以从服务器控制台进行调试。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接