我最近读了一篇文章,使用 VSCode 进行多目标 Electron 调试,其 URL 为https://kwonoj.github.io/en/post/multi-target-dbg-electron-vscode/并使其在包含 RedHat Linux 7.1 操作系统的 Oracle VM VirtuaBox Manager 中无缝运行,该操作系统使用 electron 1.8.2、node v8.9.4、vscode 1.17 和 firefox,使用检查器协议。这是我的 launch.json,它在 main.js 和 main.cpp 中设置断点,main.cpp 是一个 C++ 插件,用于计算整数是否为质数。
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type":"cppdbg",
"program": "/home/hellodev/Downloads/node-v6.11.1-linux-x64/bin/node"
"args": [
"--inspect-brk=5858",
"main.js"
],
"request": "launch",
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"serverLaunchTimeout": 50000
},
{
"type": "node",
"request": "attach",
"timeout": 10000,
"name": "Attach Program",
"port": 5858,
"protocol": "inspector"
},
{
"type":"node",
"request":"launch",
"name":"Electron Main",
"runtimeExecutable":"/home/hellodev/node-cpp-addons/node_modules/electron/dist/electron"
"protocol":"inspector"
}
],
"compounds": [
{
"name": "Server/Client",
"configurations": ["Electron Main","(gdb) Launch","Attach Program"]
}
]
}
我如何在包含 RedHat Linux 7.1 操作系统的同一 Oracle VM VirtuaBox Manager 中扩展本文以使用旧协议、electron 1.6.7、node v6.11.1、vscode 1.17 和 firefox,修改后的 launch.json 会是什么样子?
在没有成功的情况下,我尝试了一个电子预启动任务,其tasks.json如下所示,我尝试预启动任务的原因是因为runtimeExecutable是为inspector协议而不是传统协议保留的。然而,预启动任务导致运行时错误EADDRESSINUSE:port 5858。
{
"version": "1.6.7",
"command": "electron",
"isShellCommand": true,
"args": [
"--remote-debugging-port=5858",
"${workspaceRoot}/main.js",
]
}
当我使用以下 launch.json 和 vscode 绿色箭头运行复合启动配置时,收到错误消息“无法连接到运行时进程:原因:套接字被其他方结束”。
"configurations": [
{
"name": "(gdb) Launch",
"type":"cppdbg",
"program": "/home/hellodev/Downloads/node-v6.11.1-linux-x64/bin/node"
"args": [
"--inspect-brk=5858",
"main.js"
],
"request": "launch",
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"serverLaunchTimeout": 50000
},
{
"type": "node",
"request": "attach",
"timeout": 10000,
"name": "Attach Program",
"port": 5858,
"protocol": "legacy"
},
{
"type":"node",
"request":"launch",
"name":"Electron Main",
"preLaunchTask": "electron",
"protocol":"legacy", //Specify to use v8 inspector protocol
"port": 5858,
"timeout": 28000
}
],
"compounds": [
{
"name": "Server/Client",
"configurations": ["Electron Main","(gdb) Launch","Attach Program"]
}
]
}
[2018 年 2 月 24 日] @Andre Weinand,我在这里展示了我最新的 launch.json,它导致显示错误消息“无法连接到运行时;请确保运行时处于‘旧版’调试模式。”。我已尝试遵循您之前的所有建议,但仍然遇到问题。因此,当我单击与服务器/客户端复合启动配置相对应的 vscode 绿色箭头时,它会启动“Electron Main”,但不会触发我在 main.cpp(一个 C++ 插件)中设置的 GDB 断点。我理解您所说的关于将调试器语句放在 C++ 插件源代码中的意思,但我不想这样做。我该如何修复我的 launch.json?
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type":"cppdbg",
"program": "/home/xyzdev/Downloads/node-v6.11.1-linux-x64/bin/node"
"args": [
"--debug=5858"
"main.js"
],
"request": "launch",
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"launchCompleteCommand": "None"
},
{
"type": "node",
"request": "attach",
"timeout": 10000,
"name": "Attach Program",
"port": 5858,
"protocol": "legacy"
},
{
"type":"node",
"request":"launch",
"name":"Electron Main",
"runtimeExecutable":"/home/xyzdev/node-cpp-addons/node_modules/electron/dist/electron",
"runtimeArgs": [
"${workspaceRoot}/main.js",
"--remote-debugging-port" //Set debugging port for renderer process
],
"protocol":"legacy"
}
],
"compounds": [
{
"name": "Server/Client",
"configurations": ["Electron Main","(gdb) Launch","Attach Program"]
}
]
}
[2018 年 2 月 26 日] @Andre Weinand,我读到你在 2017 年 5 月 10 日在 github.com 文章中写的内容https://github.com/Microsoft/vscode/issues/26411其中规定:“对于节点版本 > 6.3 和 < 8.0,您可以使用“legacy”或“inspector”协议,但您必须确保使用匹配的“--debug”或“--inspect”参数。
顺便说一句,启动配置中的这个冗余将在 5 月份的版本中修复:您不再需要指定端口,只需指定协议即可。”由于我使用的是节点版本 6.11.1,该版本 > 6.3 且 < 8.0,我想知道我是否可以将我们的 launch.json 切换到“inspector”协议而不是“legacy”协议,以实现“无缝”调试,就像我使用节点 8.9.4 时能够做到的那样?谢谢
答案1
“protocol”属性决定是否使用“inspector”或“legacy”协议。请阅读我们的文档:https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes。
您无法使用同一个调试端口并行运行两个调试会话(您可以在上面的最后一个调试配置中执行此操作)。并且缺少“程序”或“runtimeExecutable”。
我建议将最顶层调试配置中的“协议”属性的值更改为“legacy”(假设协议是该配置的唯一问题)。