В чем разница между args и runtimeArgs в VSCode launch.json?

В чем разница между args и runtimeArgs в файле launch.json?

// Optional arguments passed to the runtime executable
"runtimeArgs": []
// Command line arguments passed to the program
"args": []

Разве программа — это не то же самое, что исполняемый файл среды выполнения?

Дополнительная информация и мотивация вопроса:

Я разрабатываю приложение nodejs. В моем package.json у меня есть скрипт start:

"start": "electron ./src/Main/main.js arg2", а в коде моего приложения я обращаюсь к process.argv[2], что дает мне arg2, поэтому, когда я запускаю npm start, мое приложение работает так, как задумано.

Когда я запускаю приложение из VSCode, однако это не так, и причина в том, что я не предоставил никаких дополнительных аргументов в launch.json. Куда мне поместить эти аргументы? process.argv, похоже, содержит аргументы, представленные либо в args, либо в runtimeArgs, хотя он также содержит некоторый аргумент --debug-brk, который мне не нужен.

Я хочу иметь возможность последовательно использовать process.argv, когда я запускаю приложение из командной строки (npm start) или запускаю его из VSCode.


person pushkin    schedule 13.02.2017    source источник


Ответы (2)


Я думаю, что это в основном объясняется в Документы по отладке узла:

Вместо того, чтобы запускать программу Node.js напрямую с помощью узла, вы можете использовать сценарии «npm» или другие инструменты запуска задач непосредственно из конфигурации запуска:

  • Любая программа, доступная в PATH (например, «npm», «mocha», «gulp» и т. д.), может использоваться для атрибута runtimeExecutable [...]

runtimeExecutable – это не программа, которую вы хотите отлаживать, а исполняемый файл, который используется для ее запуска. Получается, что runtimeArgs относится к runtimeExecutable, как args к program.

Если вам интересно, как это работает, вот соответствующая часть реализации debugAdapter.ts.

person Gama11    schedule 13.02.2017
comment
Я не вижу никакой разницы, помещаю ли я аргумент "x" в "runtimeArgs": ["run-script", "start", "x" ] или в "args": [ "x" ], это приводит к одному и тому же результату: node run-script start x. Итак, в чем тогда разница? - person Sergey; 22.03.2019

Если вы удалите атрибут программы, аргументы присоединяются после другого, и вы не видите никакой разницы.

Рассмотрим следующий пример, включая тип и program:

         {
            
           "name": "vscode-jest-tests",
            "type": "node",
            "request": "launch",
            "program": "${workspaceFolder}/node_modules/jest-cli/bin/jest.js",
            "stopOnEntry": false,
            "args": [ 
                "--runInBand"                       
            ],
            "cwd": "${workspaceFolder}",
            "preLaunchTask": null,
            "runtimeExecutable": null,
            "runtimeArgs": [
                "--nolazy"
            ],
            "env": {
                "NODE_ENV": "development"
            },
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "disableOptimisticBPs": true
        }

=› set NODE_ENV=development && C:\Program Files\nodejs\node.exe --nolazy --inspect-brk=35238 node_modules\jest-cli\bin\jest.js --runInBand

  • runtimeArg --nolazy возникает за node.exe (соответствует типу) и

  • arg --runInBand происходит за jest.js (соответствует program)

Если вы удалите атрибут программы, аргументы присоединяются после другого, и вы не видите никакой разницы.

person Stefan    schedule 16.08.2019
comment
для меня сбой отладки vscode при запуске отладки после добавления флага --experimental-worker в скрипт npm и забыл добавить в конфигурацию узла launch.json - добавив это в массив runtimeArgs, исправьте это. - person Samih A; 28.08.2020