node.js - 使用 Visual Studio Code 调试托管在 VM 上的 Node 应用程序

标签 node.js visual-studio-code

我在使用 Visual Studio Code 调试我的应用程序时寻求一点帮助,我的应用程序保存在 Oracle Virtual Box 托管的虚拟机中。

VM 已配备 Node 、express、 Node 检查器等的典型设置,我可以使用 Node 检查器调试我的应用程序(即 Node 检查器的端口已在虚拟机中转发,如果我将我的应用程序设置为使用“node --debug-brk app.js”运行,它在端口 5858 上监听,我可以导航到 localhost:8080/debug?port=5858 以开始调试)。

但是在 VSC 中,如果我在调试中使用“附加”选项,我根本无法到达断点。

我在这里遗漏了什么特别的东西吗?或者是否有任何我可以查看的日志文件 - 我在 OSX Yosemite 上并且 VM OS 在虚拟框中运行是一个 headless 的 OpenSuse,配备了 vagrant?

注意:我已经尝试通过端口 5858 远程登录到 VM,但我从 VM 内部得到了对本地计算机本身的不同响应,如下所示:

虚拟机内部:

telnet 127.0.0.1 5858
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Type: connect
V8-Version: 3.14.5.9
Protocol-Version: 1

嵌入主机: Node v0.10.32 内容长度:0

在虚拟机之外:

telnet 127.0.0.1 5858
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

非常感谢任何帮助?


是的,我在 VM 外部运行 VSCode - VM 是 headless 的。

端口已经配置为在 vagrant 供应脚本中转发。但是,一位同事告诉我,可能有一项与我们的网络适配器相关的公司政策强加给我们——阻止/导致我的连接问题。

但是我尝试了一种不同的方法。我已经通过 ssh 为端口 5858 上的所有流量建立了一个连接:

ssh -i myprivatekey -L 5858:localhost:5858 tempuserlocalhost -p 2222 

现在,当我开始调试应用程序(即 node --debug app.js)并使用调试器明确附加的附加选项时。但是,它并没有在 app.js 中达到我的断点,它应该在什么时候达到。

事实上,如果我暂停调试器,我会得到局部变量列表和调用堆栈,但会显示以下错误:

Error opening 'app.js' (File not found)

注意:app.js 和其他代码文件保存在虚拟机上,它们保存在我的本地计算机上,并相应配置了 samba 共享。也许这是造成困惑的原因?

最佳答案

我的 Vagrantfile 具有以下从我的主机到 Ubuntu VM 的映射:

config.vm.synced_folder "C:/Users/me/Documents/app", "/home/app"

通过这样做,我在 VS Code 中进行了 Node 调试:

  1. VM 中的转发端口 5858:config.vm.network :forwarded_port, host: 5858, guest: 5858

  2. 在 VS Code 中,设置以下 launch.json:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Attach",
                "type": "node",
                "request": "attach",
                "port": 5858,
                "address": "localhost",
                "restart": false,
                "sourceMaps": false,
                "localRoot": "${workspaceRoot}/api",
                "remoteRoot": "/home/app/api"
            }
        ]
    }
    
  3. 在虚拟机中:cd/home/app/api

  4. 运行 node --inspect=0.0.0.0:5858 server.js

  5. 在 VS Code 中,打开文件夹 C:/Users/me/Documents/app,设置断点并按 F5。

如果您可以远程登录到端口 5858 并从虚拟机内部和外部获得相同的响应,则可能意味着文件映射有误。

关于node.js - 使用 Visual Studio Code 调试托管在 VM 上的 Node 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120477/

相关文章:

javascript - Electron 需要模块 : due to diffrent working directory while runtime intellisense is not working

javascript - 使用 VS 代码在 ASP.NET Core MVC 中调试 javascript 和 c#

python - 有什么方法可以参数化 VS Code 的 python.pythonPath 设置吗?

docker - 使用实时观察在 VS Code 中调试 dockerize ASP.Net Core 应用程序

node.js - jmeter: NoHttpResponseException: 目标服务器响应失败

node.js - API 未根据 lambda 授权方的响应调用 lambda 并返回空消息

javascript - 从 webhook 解析 json

javascript - 如何正确转义和取消转义包含换行文字的多行字符串?

node.js - MongoDB 查询返回 null,即使它在从 mlab 迁移到 mongoDB atlas 后在集合中可用

node.js - TypeError : UserModel. create 不是一个函数,Sequelize