是否有命令行参数或环境变量禁用节点调试器的“第一行中断”功能?
答案 0 :(得分:31)
节点中实际上有两个调试器概念:V8调试器(使用基于TCP的协议)和节点命令行调试器(CLI)。
运行node debug app.js
时,将在主节点进程中运行调试器CLI,并为调试的脚本(node --debug-brk app.js
)生成新的子节点进程。选项--debug
或--debug-brk
用于在子进程中启用V8调试器。
--debug
和--debug-brk
之间的区别在于后者在第一行添加断点,因此执行会立即停止。
我建议你这个解决方案:
从网络服务器创建子流程时,请运行node --debug
而不是node debug
。这样,只创建了一个子进程,它正在运行您的应用程序,并且不会在第一行暂停。
现在您可以使用支持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)
mkdir run_as_devtools
cd run_as_devtools
touch manifest.json
touch run_as_devtools.js
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"
}
Chrome设置 - 更多工具 - 扩展程序 - 开发人员模式 - 加载解压扩展程序 - 选择run_as_devtools文件夹
P.S。最好将它与节点检查器管理器https://stackoverflow.com/a/43018133/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
答案 6 :(得分:0)
这对我有用。
node --inspect index.js
如果您还没有安装检查器,请按照节点文档的建议进行安装:
npm install -g node-inspect