如何在节点调试器中禁用“在第一行中断”

时间:2013-05-07 13:32:04

标签: node.js debugging breakpoints

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

7 个答案:

答案 0 :(得分:31)

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

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

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

我建议你这个解决方案:

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

  2. 现在您可以使用支持V8 debugger protocol的任何调试工具 - 节点内置CLI调试器node-inspector,或者如果您愿意,可以使用事件实现您自己的调试器前端(GUI) 。 (我认为这是你通过在后台运行CLI调试器来实现的目标吗?)

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

    node debug localhost:5858

    并继续像以前一样。

答案 1 :(得分:24)

根据this issue我在node回购中打开了,目前,这是不可能的。这也是节点人员没有看到的值得实现的特性,因为它似乎没有意义。[...]附加到正在运行的进程确实“同样的事情。请参阅上述问题中的其余讨论。

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

答案 2 :(得分:8)

在寻找答案的同时找到了这个 - 似乎你可以简单地运行

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

希望这有助于某人。

答案 3 :(得分:1)

编写chrome扩展名以单击开始按钮

1。运行shell

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文件夹

P.S。最好将它与节点检查器管理器https://stackoverflow.com/a/43018133/4831179

一起使用

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

答案 4 :(得分:1)

我只是从节点v6切换到v7

解决了同样的问题

答案 5 :(得分:0)

与blackmiaool的想法类似,但更简单,使用node v8,您可以使用--inspect启动脚本。如果您在其中包含以下代码,当您在Chrome devtools中打开调试窗口时,它将直接转到调试器点。此外,这允许您通过点击&#34; continue&#34;来执行异步代码。按钮,允许您的代码在返回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

答案 6 :(得分:0)

这对我有用。

node --inspect index.js

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

npm install -g node-inspect