Недавно я прочитал статью «Многоцелевая отладка Electron с помощью VSCode», URL-адрес которой https://kwonoj.github.io/en/post/multi-target-dbg-electron-vscode/, и убедился, что она легко работает в Oracle VM VirtuaBox. Менеджер, содержащий операционную систему RedHat Linux 7.1 с электронным 1.8.2, узлом v8.9.4, vscode 1.17 и firefox с использованием протокола инспектора. Вот мой launch.json, который устанавливает точки останова внутри main.js и 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"]
        }
    ]
}

Как я мог бы расширить эту статью в том же Oracle VM VirtuaBox Manager, содержащем операционную систему RedHat Linux 7.1, чтобы использовать устаревший протокол, Electron 1.6.7, узел v6.11.1, vscode 1.17 и Firefox, и что будет выглядеть в пересмотренном файле launch.json лайк?

Безуспешно я попытался выполнить предварительную задачу электронов, чьи tasks.json показан ниже. Причина, по которой я попытался выполнить предварительную задачу, заключается в том, что runtimeExecutable зарезервирован для протокола инспектора, а не для устаревшего протокола. Однако предварительная задача вызывает ошибку времени выполнения EADDRESSINUSE: порт 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"]
        }
    ]

}

[24 февраля 2018 года] @Andre Weinand, я показываю здесь мой новейший файл launch.json, который вызывает сообщение об ошибке «Не удается подключиться к среде выполнения; убедитесь, что среда выполнения находится в" устаревшем "режиме отладки». для отображения. Я пытался следовать всем вашим предыдущим рекомендациям, но все еще сталкиваюсь с проблемами. Поэтому, когда я нажимаю зеленую стрелку vscode, соответствующую конфигурации запуска составного соединения сервер / клиент, он запускает "Electron Main", но не достигает точек останова GDB, которые я установил в main.cpp, который является аддоном C++. Я понимаю, что вы говорите о размещении операторов отладчика в исходном коде дополнения 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"]
        }
    ]

}

[26 февраля 2018 года] @ Андрей Вейнанд, я читал, что вы написали 10 мая 2017 года в статье на github.com https://github.com/Microsoft/vscode/issues/26411, в которой говорится: «Вы можете использовать любой" устаревший " или протокол "инспектора" для версии узла> 6.3 и <8.0, но вы должны убедиться, что используете соответствующий аргумент «--debug» или «--inspect».

Кстати, эта избыточность в конфигурации запуска будет исправлена в майской версии: вам больше не нужно будет указывать порт, просто протокол будет работать правильно. "Поскольку я использую версию узла 6.11.1, которая > 6.3 и <8.0, мне было интересно, смогу ли я переключить наш launch.json на протокол "инспектора" вместо "устаревшего" протокола для достижения "бесшовной" отладки, как я смог сделать с узлом 8.9.4? Спасибо

1 ответ1

2

Атрибут "протокол" определяет, используется ли протокол "инспектор" или "устаревший". Пожалуйста, прочтите наш документ: https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes.

Вы не можете запустить два сеанса отладки с одним и тем же портом отладки параллельно (что вы делали в последней конфигурации отладки сверху). И отсутствует "программа" или "runtimeExecutable" отсутствует.

Я предлагаю изменить значение атрибута "protocol" в самой верхней конфигурации отладки на "legacy" (при условии, что протокол является единственной проблемой этой конфигурации).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .