使用Visual Studio代码debugging托pipe在虚拟机上的节点应用程序

我正在寻找一些帮助,使用Visual Studio Codedebugging我的应用程序,其中我的应用程序保存在由Oracle Virtual Box托pipe的虚拟机中。

虚拟机已经configuration了一个典型的节点,快速,节点检查器等设置,我可以使用节点检查器来debugging我的应用程序(即节点检查器的端口已经在虚拟机内转发,如果我设置了我的使用“node –debug-brk app.js”运行的应用程序监听端口5858,我可以导航到localhost:8080 / debug?port = 5858开始debugging。

但是,在VSC中,如果我在debugging中使用“attach”选项,则根本无法达到断点。

有什么特别的,我在这里失踪或有任何日志文件,我可以看看 – 我在OSX优胜美地和虚拟机操作系统在虚拟框中运行是一个无头的OpenSuse,配备stream浪汉?

注意:我已经尝试telnet到端口5858上的虚拟机,我得到了一个从虚拟机到本地机器本身的不同响应,如下所示:

虚拟机内部:

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 

Embedding-Host:node v0.10.32 Content-Length:0

VM之外:

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

任何帮助将非常感激?


是的,我在VM之外运行VSCode – 虚拟机是无头的。

这些端口已经被configuration为在stream浪者供应脚本内转发。 然而,一位同事告诉我,我们的networking适配器可能会有一个公司的政策被强制 – 防止/导致我的连接问题。

不过,我尝试了不同的方法。 我已经隧道连接通过SSH端口5858上的所有stream量:

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

现在,当我开始debugging应用程序(即node –debug app.js)并使用attach选项时,debugging器显然会附加上。 它不会在app.js中产生我的断点,但是它应该这样做。

实际上,如果我暂停debugging器,我得到一个本地variables和一个调用堆栈的列表,但显示以下错误:

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

注意:app.js和其他代码文件不在 VM上,它们保存在我的本地机器上,并configuration了相应的samba共享。 也许这是造成混乱?

我已经validation了通过SSH隧道端口5858到目前为止工作,你可以连接到虚拟机内部运行的节点,并使用不涉及源path的debugging器function(源path用于断点和步骤事件等)问题与源path相比,VSCode需要访问与VM内部运行的节点具有相同path的源文件。 即使通过samba共享源文件,导致文件的绝对path在虚拟机内部和外部也可能不同。 VSCode Preview的唯一解决方法是通过引入(符号)链接等方式使path相同。为了改善源path匹配,我创build了一个bug。

Andre Weinand,Visual Studio Code

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

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

我通过这样做了VS Code中的节点debugging:

  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. 在VM: cd /home/app/api
  4. 运行node --debug server.js
  5. 在VS Code中,打开文件夹C:/Users/me/Documents/app ,设置断点并按F5。

如果你可以通过telnet到5858端口,从VM内部和外部获得相同的响应,这可能意味着文件的映射是错误的。

我猜你是在虚拟机外部运行VSCode,所以和虚拟机外部的telnet类似,VSCode将无法连接到端口,因为它没有检测到v8debugging协议。

我认为您需要以某种方式configuration您的VMpipe理程序,以将5858端口从VM映射到VM主机。

如果来自VM外部的telnet将从VM内输出与telnet相同的信息,您将会知道您做得正确。