使用Visual Studio Code调试VM上托管的节点应用程序

Nic*_*ord 9 node.js visual-studio-code

我正在寻找一些使用Visual Studio Code调试我的应用程序的帮助,我的应用程序保存在由Oracle Virtual Box托管的虚拟机中.

已经为VM配置了node,express,node-inspector等的典型设置.我可以使用node-inspector调试我的应用程序(即节点检查器的端口已在vm内转发,如果我设置了我的运行"node --debug-brk app.js"的应用程序,它侦听端口5858,我可以导航到localhost:8080/debug?port = 5858开始调试).

但是在VSC中如果我在调试中使用"attach"选项,我根本无法进入断点.

有什么特别的东西我在这里缺少或者是否有我可以看到的任何日志文件 - 我在OSX Yosemite上并且VM OS在虚拟盒中运行是一个无头的OpenSuse,配备了vagrant?

注意:我已经尝试通过端口5858远程登录到VM,我从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
Run Code Online (Sandbox Code Playgroud)

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

在VM之外:

telnet 127.0.0.1 5858
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激?


是的我在VM外部运行VSCode - 虚拟机是无头的.

端口已配置为在vagrant配置脚本内转发.然而,一位同事告诉我,可能有一项公司政策被强制要求我们与我们的网络适配器有关 - 防止/导致我的连接问题.

但是我尝试了不同的方法.我通过ssh为端口5858上的所有流量隧道连接:

ssh -i myprivatekey -L 5858:localhost:5858 tempuserlocalhost -p 2222 
Run Code Online (Sandbox Code Playgroud)

现在,当我开始调试应用程序(即节点--debug app.js)并使用附加选项时,调试器显然会附加.虽然应该这样做,但它并没有在app.js中击中我的断点.

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

Error opening 'app.js' (File not found)
Run Code Online (Sandbox Code Playgroud)

注意:app.js和其他代码文件保存在VM上,它们保存在我的本地计算机上,并相应地配置了samba共享.也许这引起了混乱?

Mar*_*ari 11

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

config.vm.synced_folder "C:/Users/me/Documents/app", "/home/app"
Run Code Online (Sandbox Code Playgroud)

我通过这样做在VS Code中进行节点调试:

  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"
            }
        ]
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在VM中: cd /home/app/api
  4. node --debug server.js
  5. 在VS Code中,打开文件夹C:/Users/me/Documents/app,设置断点并按F5.

如果你可以telnet到端口5858,并同时获得来自内部和外部的虚拟机相同的响应,这可能意味着文件的映射是错误的.

  • 在第4步中,您只需要'--debug'或'--debug-brk',而不是两者都需要。对于服务器进程,如果您不想调试服务器的启动顺序,则“ --debug”可能就足够了。 (2认同)

And*_*and 5

我已经验证通过 ssh 隧道连接端口 5858 到目前为止您可以连接到在 VM 内运行的节点并使用不涉及源路径的调试器功能(源路径用于断点和步骤事件等)问题使用源路径是 VSCode 需要访问与 VM 内运行的节点具有相同路径的源文件。即使您通过 samba 共享源,通向文件的绝对路径在 VM 内部和外部之间也可能不同。VSCode 预览的唯一解决方法是使路径相同,例如通过引入(符号)链接等。我在我们这边创建了一个错误来改进源路径匹配。

Andre Weinand,Visual Studio Code