如何使用旧协议、electron 1.6.7、node v6.11.1、vscode 1.17 和 Firefox 无缝地通过 VSCode 进行多目标 Electron 调试?

如何使用旧协议、electron 1.6.7、node v6.11.1、vscode 1.17 和 Firefox 无缝地通过 VSCode 进行多目标 Electron 调试?

我最近读了一篇文章,使用 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”(假设协议是该配置的唯一问题)。

相关内容