重新启动节点时如何使节点检查器重新启动?

Posted

技术标签:

【中文标题】重新启动节点时如何使节点检查器重新启动?【英文标题】:How can I make node-inspector restart when node is restarted? 【发布时间】:2013-09-22 02:29:27 【问题描述】:

经常使用节点检查器。当我编辑我的代码并重新启动时,我得到了不可避免的

与目标分离

新进程启动时出错。我总是要找到选项卡节点检查器打开并重新启动它。

我想知道我是否可以避免这种情况。例如,从 node 向 node-inspector 发送一条消息,告诉运行 node-inspector 的浏览器选项卡重新启动。

【问题讨论】:

js保存时如何让node-debug进程启动? 【参考方案1】:

当被调试的进程重新启动时,您不必重新启动 Node Inspector 进程本身。您需要做的就是使用 Node Inspector GUI 重新加载浏览器选项卡。

恐怕目前没有简单的方法可以在重新启动调试进程时自动重新加载 Node Inspector GUI 页面。可能可以在 Node Inspector 后端执行某种主动轮询,但这是必须由某人实现的功能。

根据您正在调试的应用程序的哪个部分,您可能会发现“实时编辑”功能很有用。它允许您从 Node Inspector 编辑您的代码,将更改保存到 Node/V8 运行时并可能还回磁盘。这样您就不必在进行更改后重新启动已调试的进程。


此功能已在 Node Inspector 中实现,并在 v0.7.0 中发布。详情请见issue #266。

【讨论】:

"您需要做的就是使用 Node Inspector GUI 重新加载浏览器选项卡。"我知道这一点 - 因此在问题中提到重新加载浏览器选项卡。 您可以使用 LiveReload for Chrome 或 AutoReload for Firefox 重新加载调试选项卡。【参考方案2】:

此功能已在 Node Inspector 中实现,并在 v0.7.0 中发布。详情请见issue #266。

上一个答案这里有一个解决方法:

我写了一个简单的js脚本,供greasemonkey/tampermonkey执行。

脚本在地址为http://127.0.0.1:8080/debug?port=5858 的选项卡上查找消息“已与目标分离”。一旦消息可见,页面就会重新加载,直到它消失。

此解决方案是一种解决方法。它不应该被认为是理想的解决方案(我同意 Miroslav),如下:

// ==UserScript==
// @name       Reload node-inspector tab
// @version    0.1
// @description  looks for the detached message and auto reload the page
// @match      http://127.0.0.1:8080/debug?port=5858
// ==/UserScript==

var exec = function()
    setTimeout(function()
        var el = document.getElementsByClassName("help-window-title")[0];
        if(el && el.innerhtml == "Detached from the target")
            location.reload();
         else 
            setTimeout(function() exec(); , 1000);
        
    , 1000);
;

exec();

【讨论】:

多么漂亮和优雅!这应该很容易在 Node Inspector 中实现,请参阅 github.com/node-inspector/node-inspector/issues/266。 此功能已在 Node Inspector v0.7.0 中发布。享受吧! @MiroslavBajtoš 如果您添加“升级节点检查器”作为答案,我会将其标记为正确。【参考方案3】:

来自this SO 的少量交叉发布,并对此主题进行了更新。

Chrome (58) 标准开发者窗格中有一个链接,它会打开一个新的“无头”窗口,无论应用程序如何重建/重新启动,它都会神奇地重新连接到节点检查。

我正在运行 Express.js,例如DEBUG=myapp:* supervisor -- --inspect bin/www & 发现很难使用不断变化的普通 guid-laden URL 重新连接。但是这个 Chrome 工具可以整天可靠地重新连接。

在 Threads > Main 下,您应该会看到“Node instance available. Connect”。

我发现新窗口不太好用,因为我更喜欢一个选项卡,但自动重新连接非常可靠,我会忍受的!

我发现的唯一缺点是当它重新连接时会清除所有断点。

【讨论】:

【参考方案4】:

当然,这很容易。先安装npm install -g nodemon

然后你可以运行node-inspector & nodemon --debug app.js

(将 app.js 替换为您的脚本名称)

尽管出现语法错误,您仍然可能需要手动重新加载节点检查器选项卡

【讨论】:

【参考方案5】:

Step1. 不要使用node-inspector - chrome 团队已经发布了新作品,无法与 node-inspector 模块集成。如果您继续使用node-inspector,您将错过这些功能。

Step2. 要运行您的脚本,请使用:nodemon --inspect-brk yourScript.js - brk 部分在第一行代码上创建一个自动断点。如果您尚未安装 nodemon,请先使用:npm install -g nodemon

Step3. 然后打开 chrome 应用,打开 chrome 开发工具(F12Ctrl+Shift+I)并点击节点图标,如下所示:

Step4. 更改yourScript.js - chrome devtools 会自动为您在项目中所做的每一项更改重新加载调试器。这是因为 nodemon 监视项目文件夹并重置进程 - 这会重置调试器连接。

更多:Debugging in 2017 with Node.js - 我在 2019 年 8 月 29 日写这篇文章,但 2 年后仍然相关。

【讨论】:

视频是否包含“步骤 1”中断言的参考?最后我检查了(节点 10 和 12)节点检查仍然是节点文档中的首选调试机制。 这对我来说实际上是正确的解决方案。服务器重启后会重新连接到新的WS。

以上是关于重新启动节点时如何使节点检查器重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

WebStorm,使用 Node Supervisor(所以每次代码更改后不必重新启动)?

每当节点服务器重新启动时重新加载浏览器

MySQL 集群数据节点在其孪生失败时重新启动

如何防止 SKAction 序列在解码后重新启动?

驱动程序重新启动后 Spark Streaming 检查点不起作用

如何在服务器重新启动之前关闭节点 websocket 客户端上的所有 websocket 连接