48

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

4

7 回答 7

35

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

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

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

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

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

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

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

    node debug localhost:5858

    并像以前一样继续。

于 2013-05-22T18:44:55.973 回答
24

根据我在节点存储库中打开的这个问题,目前这是不可能的。这也是节点人员认为不值得实施的功能,“因为它似乎毫无意义。[...] 附加到正在运行的进程完全一样”。请参阅上述问题中的其余讨论。

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

于 2013-05-20T15:19:41.150 回答
7

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

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

希望这可以帮助某人。

于 2014-12-09T07:06:16.903 回答
1

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

于 2017-05-24T21:00:34.923 回答
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文件夹

PS 最好将它与节点检查器管理器一起使用https://stackoverflow.com/a/43018133/4831179

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

于 2017-04-29T12:08:55.953 回答
0

这对我有用。

node --inspect index.js

如果您尚未安装 inspector,请按照节点文档的建议安装它:

npm install -g node-inspect
于 2021-01-12T10:23:30.820 回答
0

类似于 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

请参阅此处了解更多信息

于 2017-06-17T09:54:40.967 回答