Точки останова TypeScript требуют много времени, чтобы начать работу при отладке в контейнере Docker и коде VS - PullRequest
0 голосов
/ 03 мая 2020

Я использую рецепт кода VS из https://github.com/microsoft/vscode-recipes/tree/master/Docker-TypeScript для отладки приложения Node.js в контейнере Docker. Я не вносил никаких изменений ни в одну из настроек в шаблоне и следовал официальным инструкциям:

git clone https://github.com/Microsoft/vscode-recipes.git
cd vscode-recipes/Docker-TypeScript
npm install
code .

Когда я запускаю отладчик с Launch in Docker и устанавливаю точку останова в файле index.ts, после того, как я вижу сообщение Debugger attached., пройдет от 63 до 68 секунд, прежде чем установленные точки останова начнут действовать Затем я могу установить другие контрольные точки, и все они работают нормально. Однако, если я внесу изменения в файл и сохраню, это заставит отладчик сбросить соединение, и мне снова придется ждать от 30 секунд до 2 минут, прежде чем снова начнут срабатывать точки останова.

Я пробовал это с другой проект, и я вижу то же самое поведение. Если я отлаживаю за пределами Docker контейнера, точки останова сразу попадают. Это заставляет меня думать, что это как-то связано с Docker.

Кто-нибудь видел это? Есть предложения?

Я работаю:

Docker Desktop on a Mac  v2.2.0.5 (43884)
VS Code                  v1.44.2
macOS                    10.14.6 (cannot upgrade - work machine)

1 Ответ

0 голосов
/ 03 мая 2020

Мне удалось исправить это, изменив значение timeout в launch.json.

{
      "type": "node",
      "request": "launch",
      "name": "Launch in Docker",
      "preLaunchTask": "tsc-watch",
      "protocol": "auto",
      "runtimeExecutable": "npm",
      "runtimeArgs": [ "run", "docker-debug" ],
      "port": 5858,
      "restart": true,
      "timeout": 60000,
      "localRoot": "${workspaceFolder}/dist",
      "remoteRoot": "/server/dist",
      "outFiles": [
        "${workspaceFolder}/dist/**/*"
      ],
      "trace": true,
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen"
    }

timeout относится к Retry for this number of milliseconds to connect to Node.js. Default is 10000 ms.. Тем не менее, не похоже, что он работает, как ожидалось. Похоже, что вместо этого он ждет еще долго, чтобы снова проверить, подключен ли он к отладчику.

Так что "timeout": "60000" означало, что если отладчик не может сразу подключиться, он будет ждать целую минуту перед повторной попыткой.

Как только я изменил значение на 3000, и точки останова начали срабатывать гораздо раньше. Значение должно быть достаточно длинным для запуска вашего контейнера и задачи tsc-watch, в противном случае вы получите ошибку, которую отладчик не смог подключиться.

Этого можно избежать, если запустить контейнер перед запуском отладчика.

Я до сих пор не могу объяснить, почему он говорил Debugger attached., хотя отладчик кода VS на самом деле не был или, по крайней мере, он не знал, что он был прикреплен.

...