我正在寻找一些使用Visual Studio Code调试我的应用程序的帮助,我的应用程序保存在由Oracle Virtual Box托管的虚拟机中。
已经为VM配置了node,express,node-inspector等的典型设置。我可以使用node-inspector调试我的应用程序(即节点检查器的端口已在vm内转发,如果我设置我的应用程序运行"节点--debug-brk app.js"它侦听端口5858,我可以导航到localhost:8080 / debug?port = 5858开始调试。)
但是在VSC中,如果我使用"附加"调试中的选项我根本无法进入断点。
我在这里缺少什么特别的东西,或者是否有我可以看到的任何日志文件 - 我在OSX Yosemite上,VM OS在虚拟盒中运行是一个无头的OpenSuse,配置了vagrant?< / p>
注意:我已尝试通过端口5858远程登录虚拟机,我从虚拟机内部获得了与本地计算机本身不同的响应,如下所示:
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共享。也许这会造成混乱?
答案 0 :(得分:10)
我的Vagrantfile具有从我的主机到Ubuntu VM的以下映射:
config.vm.synced_folder "C:/Users/me/Documents/app", "/home/app"
我通过这样做在VS Code中进行节点调试:
转发虚拟机中的端口5858:config.vm.network :forwarded_port, host: 5858, guest: 5858
在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"
}
]
}
cd /home/app/api
node --debug server.js
C:/Users/me/Documents/app
,设置断点并按F5。如果您可以telnet到端口5858并从VM内部和外部获得相同的响应,则可能意味着文件映射是错误的。
答案 1 :(得分:4)
我已经验证通过ssh对端口5858进行隧道传输到目前为止,您可以连接到在VM内部运行的节点,并使用不涉及源路径的调试器功能(源路径用于断点和步骤事件等。 ) 源路径的问题是VSCode需要访问源文件,其路径与在VM内运行的节点相同。即使您通过samba共享源,导致文件的绝对路径在VM内部和外部之间也可能不同。 VSCode预览的唯一解决方法是使路径相同,例如通过引入(符号)链接等 我在我们这边创建了一个bug来改进源路径匹配。
Andre Weinand,Visual Studio Code
答案 2 :(得分:2)
我猜你在VM之外运行VSCode,因此类似于来自VM外部的telnet,VSCode将无法连接到端口,因为它没有检测到v8调试协议。
我认为您需要以某种方式配置VM虚拟机管理程序,以将5858端口从VM映射到VM主机。
如果来自VM外部的telnet将从VM中输出与telnet相同的内容,您将知道您已正确完成。
答案 3 :(得分:0)
它并不那么复杂,只需通过Virtualbox共享您的文件夹,只需在VM的内部和外部共享文件夹,就可以在两个操作系统中将您的文件夹永久或临时地挂载,在我的情况下,我使用Windows 10进行全屏显示工作室功能,但是可以用linux或OSx完成,只需在NIC(网卡)中做一些桥接即可 提示:我的用户bitnami更加清楚未知的无用信息存储库