【问题标题】:How to disable in the node debugger "break on first line"如何在节点调试器中禁用“第一行中断”
【发布时间】:2013-05-07 13:32:03
【问题描述】:

是否有命令行参数或环境变量禁用节点调试器的“第一行中断”功能?

【问题讨论】:

  • 你现在向节点传递什么参数?
  • 仅限node debug script.js
  • 我自己找过这个,不认为这是可能的。开始调试后,只需点击“c”即可。

标签: node.js debugging breakpoints


【解决方案1】:

node 中实际上有两个调试器概念:V8 调试器(带有基于 TCP 的协议)和 node 命令行调试器 (CLI)。

当您运行 node debug app.js 时,调试器 CLI 将在主节点进程中运行,并为调试脚本 (node --debug-brk app.js) 生成一个新的子节点进程。选项--debug--debug-brk用于在子进程中开启V8调试器。

--debug--debug-brk 的区别在于后者在第一行添加了一个断点,因此执行立即停止。

我会建议你这个解决方案:

  1. 当您从 Web 服务器创建子进程时,请运行 node --debug 而不是 node debug。这样只会创建一个子进程,它正在运行您的应用程序,并且不会在第一行暂停。

  2. 现在您可以使用任何支持V8 debugger protocol 的调试工具 - 节点内置 CLI 调试器,node-inspector 或者您可以根据需要实现自己的调试器前端 (GUI)。 (我想这就是你试图通过在后台运行 CLI 调试器来实现的目标?)

    如果您决定使用内置 CLI,只需生成另一个子进程并告诉节点 CLI 调试器连接到在步骤 1 中启动的进程:

    node debug localhost:5858

    然后像以前一样继续。

【讨论】:

  • 感谢 Miroslav 在这里和 Github 上的回答!我们正在做的是为我们构建的内部 Web 框架构建一个 Web 调试器客户端。我们仍然缺少“禁用第一行中断”功能。缺少此功能可能会迫使我们在堆栈中使用额外的进程或硬编码c(继续)。我们现在拥有所有这些信息:SIGUSER1--debug--debug-brk 等。我们肯定会找出/破解一些东西。 :)
  • 我不明白的事情:你为什么使用 CLI 接口从 webserver 到调试进程进行通信?为什么不直接使用 V8 调试器协议呢?您可以查看 CLI 实现以了解命令如何转换为 V8 请求:github.com/joyent/node/blob/master/lib/_debugger.js
  • 是的,我们将使用 V8 协议(这就是为什么您在节点邮件列表中回答的问题:groups.google.com/forum/?fromgroups#!topic/nodejs/h6lYK3i6KTA)。我们已经完成了一个基于 CLI 运行的概念验证。但是,是的,V8 协议是正确的解决方案。
【解决方案2】:

根据this issue 我已经在node repo 中打开,目前,这是不可能的。这也是节点人员不认为值得实现的功能“因为它似乎毫无意义。[...] 附加到正在运行的进程完全是”同样的事情。请参阅上述问题中的其余讨论。

如果您认为自己想要这样的功能,请投票,在 Github 问题中发表评论,如果没有回复,请打开一个新的并在此处发布。

【讨论】:

    【解决方案3】:

    在自己寻找答案时发现了这个 - 似乎你可以简单地运行

    node-debug --debug-brk=0 (progname)

    希望这对某人有所帮助。

    【讨论】:

    • 这对我在撰写本文时的最新版本不起作用。仅使用 --debug 确实有效。
    【解决方案4】:

    写一个chrome扩展来点击开始按钮

    1。运行外壳

    mkdir run_as_devtools
    cd run_as_devtools
    touch manifest.json
    touch run_as_devtools.js
    

    2。编辑文件

    run_as_devtools.js:

    if (location.protocol === 'chrome-devtools:' && location.href.match(/ws=localhost/))(function () {
        'use strict';
        setTimeout(function () {
            try {
                document.querySelector('html /deep/ .long-click-glyph').click();
            } catch (e) {
                console.log(e);
            }
        }, 500);    
    })();
    

    manifest.json:(它使用 chromevox 的密钥,所以不要与 chromevox 一起使用)

    {
       "content_scripts": [{
          "js": [ "run_as_devtools.js" ],
          "matches": [ "<all_urls>" ]
       }],
       "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB",
       "manifest_version": 2,
       "name": "Elevated Devtools extension",
       "version": "1.0"
    }
    

    3。安装扩展

    Chrome设置-更多工具-扩展-开发者模式-加载解压扩展-选择run_as_devtools文件夹

    附:最好与 Node 检查器管理器一起使用它https://stackoverflow.com/a/43018133/4831179

    参考:https://stackoverflow.com/a/17044405/4831179

    【讨论】:

      【解决方案5】:

      我只是通过从节点 v6 切换到 v7 解决了同样的问题

      【讨论】:

        【解决方案6】:

        类似于 blackmiaool 的想法,但更简单,使用 node v8,您可以使用 --inspect 启动脚本。如果你有下面的代码,当你在 Chrome devtools 中打开调试窗口时,它会直接带你到调试器点。此外,这允许您通过点击“继续”按钮来执行异步代码,这允许您的代码在返回到 repl 之前运行:

        // app_shell.js
        
        var UserModel = require("./some_user_model");
        
        function looper() {
            var Tmp = { UserModel: UserModel };
            debugger;
            setTimeout(looper, 100);
        }
        looper();
        

        在 shell 脚本中,您可以执行以下操作:

        echo "Click the 'Open dedicated DevTools for Node' link"
        python -mwebbrowser about:inspect
        node --inspect app_shell.js
        

        See here for more info

        【讨论】:

          【解决方案7】:

          这对我有用。

          node --inspect index.js
          

          如果您尚未安装检查器,请按照节点文档的建议进行安装:

          npm install -g node-inspect
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-03
            • 1970-01-01
            • 2019-08-22
            相关资源
            最近更新 更多