如何使用源映射远程调试 Node.js 应用程序(使用 WebStorm)

Posted

技术标签:

【中文标题】如何使用源映射远程调试 Node.js 应用程序(使用 WebStorm)【英文标题】:How to remotely debug Node.js app with source maps (using WebStorm) 【发布时间】:2016-07-27 14:04:23 【问题描述】:

我正在努力调试从 ES6 和 BabelJs 翻译而来的一段 node.js 代码。情况如下:

我有一个带有 ES6 源文件 server\app.js 的项目,它被翻译成 ES5 并与 dist\server\app.js.map 一起放入 dist\server\app.js。我可以在原始server\app.js 中设置一个断点,然后在本地调试文件dist\server\app.js 以命中该断点 - 源映射工作得非常好。

现在,我已将整个 dist 文件夹放到远程 PC 上,并在其中使用 node --debug-brk dist\server\app.js 命令启动我的应用程序。从 WebStorm 使用远程调试器连接到该进程使应用程序运行,但没有命中断点。

令人惊讶的是,如果我从安装了 WebStorm 的同一主机上的终端运行 node --debug-brk dist\server\app.js,那么连接到 localhost:5858 的远程调试器能够触发该断点。

为了在远程调试时命中该断点,我有什么遗漏吗?

提前感谢您的任何建议。

Webstorm: 2016.1
Node: 4.4.2 (both local and remote machine)

【问题讨论】:

【参考方案1】:

当在与 WebStorm 的通信中遇到断点时,节点调试器似乎会发送行号和文件名。文件路径是运行服务器节点的路径。我们拥有的是:

Server (remote):
/remotePath/dist/server/app.js (transpiled file ES5)

Local system:
/localPath/server/app.js (source file ES6)
/localPath/dist/server/app.js (transpiled file ES5)
/localPath/dist/server/app.js.map (source map).

什么节点发回的是这条路径:

/remotePath/dist/server/app.js

所以 WebStorm 尝试在其文件系统中查找此文件。但它不存在。 这里的解决方案可能是在本地文件系统中创建一个符号链接:

/remotePath -> /localPath

顺便说一句。 VS Code 通过在调试配置中暴露 localRoot 和 remoteRoot 解决了这个问题。

【讨论】:

以上是关于如何使用源映射远程调试 Node.js 应用程序(使用 WebStorm)的主要内容,如果未能解决你的问题,请参考以下文章

node.js 远程调试debug产线环境代码

请教大神们,我在eclipse 安装NODE.JS调试环境时候,添加软件源网址后,啥都不出来。这是为啥阿?

使用 Eclipse 作为 Node.JS 远程调试器(拒绝连接)

Node.js 远程调试不起作用

在Visual Studio上开发Node.js程序——远程调试及发布到Azure

无法从 WebStorm 调试远程 docker node.js 应用程序