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

问题描述 投票:8回答:4

我正在寻找一些使用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

嵌入主机:节点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.

任何帮助将非常感激?


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

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

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

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

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

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

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

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

node.js visual-studio-code
4个回答
4
投票

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

Visual Studio Code的Andre Weinand


11
投票

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

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

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

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


2
投票

我猜你在VM之外运行VSCode,因此类似于来自VM外部的telnet,VSCode将无法连接到端口,因为它没有检测到v8调试协议。

我认为您需要以某种方式配置VM虚拟机管理程序,以将5858端口从VM映射到VM主机。

如果来自VM外部的telnet将从VM内输出与telnet相同的内容,您将知道您已正确完成。


0
投票

它不是那么复杂,只需通过Virtualbox共享你的文件夹,只需在VM外部和内部共享文件夹,你可以将你的文件夹挂载到两个操作系统中是永久的或时间的,在我的情况下,我使用windows 10来实现完整的可视工作室功能但是它可以用linux或OSx完成只需在NIC(网卡)中做一些桥接工具提示:我用户bitnami更清楚未知的流浪者存储库

© www.soinside.com 2019 - 2024. All rights reserved.