如何调试“构建”的生产 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的主要内容,如果未能解决你的问题,请参考以下文章