如何调试“构建”的生产 NodeJS

Posted

技术标签:

【中文标题】如何调试“构建”的生产 NodeJS【英文标题】:How to debug "built" production NodeJS 【发布时间】:2021-03-15 02:29:53 【问题描述】:

我正在使用 Visual Studio 代码在生产环境中调试节点应用程序

Node 进程在 docker 内部运行,

我端口转发并通知 USR1 以启用将调试器从 VS 代码附加到该节点进程

我的 VS Code 配置是这样的


  "version": "0.2.0",
  "configurations": [
    
      "type": "node",
      "request": "attach",
      "name": "Debug: service",
      "sourceMaps": true,
      "smartStep": true,
      "remoteRoot": "/src/",
      "localRoot": "/home/my-username/work/orders/src/",
      "protocol": "inspector",
      "port": 9229,
      "restart": true,
      "address": "0.0.0.0",
      "skipFiles": [
        "<node_internals>/**",
        "<node_modules>/**"
      ]
    
  ]

通过 VS 代码,我可以挂钩到应用程序,并且应用程序可以在异常时中断 但是,没有源映射导致我的源代码中的所有断点都是“未绑定断点”

VS代码中加载的脚本列表显示

VS 代码调试器能够在 dist 中看到我的源代码的 node_modules 和 built 版本。另一个值得注意的一点是,用于构建 /dist 的源代码也可以直接在生产服务器的上层文件夹中获得。

在这种情况下,如何使用我未构建的源代码调试构建的生产过程?

我将 Chrome 行为添加为单独的问题

NodeJs: Chrome inspector can map source but unable to debug on original source

【问题讨论】:

【参考方案1】:

Node 已附带集成调试器。但是它没有图形用户界面,所以你需要使用命令行版本。

您可以使用节点调试启动此调试器。

$node debug test.js
< Debugger listening on port 5858
debug> . ok
break in test.js:1
> 1 var a= 5;
  2 a = a*a
  3 a += 2;
debug>

它会向您显示暂停的位置,然后让您使用 next 和 cont 等命令控制执行。

debug> next
break in test.js:2
  1 var a= 5;
> 2 a = a*a
  3 a += 2;
  4

repl 和 watch 命令允许您查看局部变量的值。

【讨论】:

【参考方案2】:

不知道对你有没有帮助。但我认为你必须使用node-inspector。它可以在任何支持 WebSocket 的浏览器中使用。真的很不错。

很酷的东西

Node Inspector 使用 WebSockets,因此不会轮询中断。 远程调试和调试远程机器。 实时编辑正在运行的代码,可选择将更改持久化回文件系统。 在尚未加载到 V8 的文件中设置断点 - 对于调试模块加载/初始化很有用。 可嵌入到其他应用程序中 - 有关详细信息,请参阅嵌入 HOWTO。

【讨论】:

以上是关于如何调试“构建”的生产 NodeJS的主要内容,如果未能解决你的问题,请参考以下文章

NodeJs:Chrome 检查器可以映射源但无法在原始源上调试

解决生产环境js无法调试问题

无法在 docker 中调试 nodejs 应用程序

如何在 nodeJs 中使用 nodemon 调试应用程序

如何设置nodejs调试模式不听127.0.0.1

如何调试nodejs程序 在谷歌浏览器