Сочетание отладки в VS-коде с задержкой запуска

Я пытаюсь запустить несколько программ, которые должны общаться друг с другом в отладчике в коде VS и создать launch.json с соединением, запускающим каждый из исполняемых файлов. Программы запускаются одновременно и все пытаются одновременно подключиться к хосту. Есть ли какой-либо способ в VS Code явно установить некоторую задержку времени между запуском каждого из исполняемых файлов, скажем, 250 мс?

{
 "version": "0.2.0",
 "configurations": [
    {
        "name": "Host",
        "type": "cppdbg",
        "request": "launch",
        "program": "/home/user/build/bin/host",
        "args": [],
        "stopAtEntry": false,
        "cwd": "/home/user/build/bin",
        "environment": [],
        "externalConsole": true,
        "linux": {
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    },
    {
        "name": "Node A",
        "type": "cppdbg",
        "request": "launch",
        "program": "/home/user/build/bin/Node_A",
        "args": ["ArgA","ArgB","ArgC"],
        "stopAtEntry": false,
        "cwd": "/home/user/build/bin",
        "environment": [],
        "externalConsole": true,
        "linux": {
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    },
    {
        "name": "Node B",
        "type": "cppdbg",
        "request": "launch",
        "program": "/home/user/build/bin/Node_B",
        "args": ["ArgA","ArgB","ArgC"],
        "stopAtEntry": false,
        "cwd": "/home/user/build/bin",
        "environment": [],
        "externalConsole": true,
        "linux": {
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    }
 ],
 "compounds": [
    {
        "name": "System",
        "configurations": ["Host","Node A","Node B"]
    }
 ]
}

Ответ 1

Да, вы можете добавить предварительную задачу, которая будет спать в течение x секунд.

Допустим, у вас есть клиент и сервер на Node.js, а загрузка базы данных с сервером занимает больше времени, это вызывает проблемы с клиентом.

Задержка клиентского отладчика на vscode будет работать так же на Mac OS X

Сначала создайте задачу в той же папке, что и файл launch.json с именем tasks.json, который будет создавать команду оболочки перед запуском клиента.

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
    {
        "label": "Sleepdelay",
        "type": "shell",
        "command": "sleep 6",
        "windows": {
            "command": "ping 127.0.0.1 -n 6 > nul"
        },
        "group": "none",
        "presentation": {
            "reveal": "silent",
            "panel": "new"
        }
    }
]

}

Добавьте следующую предварительную задачу в файл launch.json сейчас, чтобы вызвать задачу.

"configurations": [
    {
        "type": "chrome",
        "request": "launch",
        "name": "Client",
        "url": "http://localhost:9090",
        "webRoot": "${workspaceFolder}/client/src",
        "breakOnLoad": true,
        "sourceMapPathOverrides": {
            "webpack:///./src/*": "${webRoot}/*"
        },
        "preLaunchTask": "Sleepdelay"
        //"runtimeExecutable": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
    },
    {
        "type": "node",
        "request": "launch",
        "name": "Server",
        "program": "${workspaceFolder}/server/server.js",
        "envFile": "${workspaceFolder}/server/.env",
        "cwd": "${workspaceFolder}/server/"

    }
],
"compounds": [
    {
        "name": "Server/Client",
        "configurations": ["Server", "Client"]
    }
]

Команда sleep доступна в Linux и MAC OS X. Для Windows просто используйте этот взлом вместо этого:

ping 127.0.0.1 -n 6> нуль

Теперь у вас есть простой способ отложить запуск клиента перед сервером.