【发布时间】:2013-05-07 13:32:03
【问题描述】:
是否有命令行参数或环境变量禁用节点调试器的“第一行中断”功能?
【问题讨论】:
-
你现在向节点传递什么参数?
-
仅限
node debug script.js -
我自己找过这个,不认为这是可能的。开始调试后,只需点击“c”即可。
标签: node.js debugging breakpoints
是否有命令行参数或环境变量禁用节点调试器的“第一行中断”功能?
【问题讨论】:
node debug script.js
标签: node.js debugging breakpoints
node 中实际上有两个调试器概念:V8 调试器(带有基于 TCP 的协议)和 node 命令行调试器 (CLI)。
当您运行 node debug app.js 时,调试器 CLI 将在主节点进程中运行,并为调试脚本 (node --debug-brk app.js) 生成一个新的子节点进程。选项--debug或--debug-brk用于在子进程中开启V8调试器。
--debug 和--debug-brk 的区别在于后者在第一行添加了一个断点,因此执行立即停止。
我会建议你这个解决方案:
当您从 Web 服务器创建子进程时,请运行 node --debug 而不是 node debug。这样只会创建一个子进程,它正在运行您的应用程序,并且不会在第一行暂停。
现在您可以使用任何支持V8 debugger protocol 的调试工具 - 节点内置 CLI 调试器,node-inspector 或者您可以根据需要实现自己的调试器前端 (GUI)。 (我想这就是你试图通过在后台运行 CLI 调试器来实现的目标?)
如果您决定使用内置 CLI,只需生成另一个子进程并告诉节点 CLI 调试器连接到在步骤 1 中启动的进程:
node debug localhost:5858
然后像以前一样继续。
【讨论】:
c(继续)。我们现在拥有所有这些信息:SIGUSER1、--debug、--debug-brk 等。我们肯定会找出/破解一些东西。 :)
根据this issue 我已经在node repo 中打开,目前,这是不可能的。这也是节点人员不认为值得实现的功能“因为它似乎毫无意义。[...] 附加到正在运行的进程完全是”同样的事情。请参阅上述问题中的其余讨论。
如果您认为自己想要这样的功能,请投票,在 Github 问题中发表评论,如果没有回复,请打开一个新的并在此处发布。
【讨论】:
在自己寻找答案时发现了这个 - 似乎你可以简单地运行
node-debug --debug-brk=0 (progname)
希望这对某人有所帮助。
【讨论】:
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文件夹
附:最好与 Node 检查器管理器一起使用它https://stackoverflow.com/a/43018133/4831179
【讨论】:
我只是通过从节点 v6 切换到 v7 解决了同样的问题
【讨论】:
类似于 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
【讨论】:
这对我有用。
node --inspect index.js
如果您尚未安装检查器,请按照节点文档的建议进行安装:
npm install -g node-inspect
【讨论】: