На этой неделе я узнал, как заставить VS Code Chrome Debugger работать с веб-приложением, над которым я работаю и которое использует веб-пакет. Весь процесс был довольно простым, и работать с VS Code Chrome Debugger очень весело. Одним словом: круто.

Процесс:

  1. Установите отладчик для Chrome и перезагрузите рабочее пространство.

2. Откройте панель отладчика: это значок «нет ошибок» прямо над значком расширений, или вы можете нажать CMD + SHIFT + D

3. Теоретически или, может быть, на практике, если вам повезет, вы можете щелкнуть зеленую стрелку, Chrome Debugger сгенерирует для вас launch.json, и вы без проблем можете добавить точки останова в свой код. Если вам не повезло, возможно, есть несколько вещей, которые нужно решить, прежде чем вы отправитесь в путь.

4. Во-первых, в readme упоминается забавная штука с режимом удаленной отладки Chrome:

Для меня Chrome уже был запущен по двум причинам: моя конфигурация веб-пакета автоматически открывает мой сервер разработки, когда я его запускаю, и в настоящее время я читал документацию по этому расширению.

Я подумал, нет проблем, я просто настрою Chrome на постоянное включение удаленного отладчика. За исключением того, что вы не можете этого сделать (если вы работаете на Mac), вам нужно выполнить /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 в своем терминале, а именно так я никогда не хочу открывать Chrome.

К счастью, расширение Chrome Debugger решает эту проблему, запустив отдельный экземпляр Chrome с включенной удаленной отладкой. Итак, мне пришлось привыкнуть к управлению отдельным экземпляром Chrome, который я всегда запускаю через панель отладчика, но это небольшое и стоящее неудобство с точки зрения вознаграждения.

5. Отладчику Chrome необходимо знать, откуда отправляются ваши файлы, иначе он не будет знать, как останавливаться на ваших точках останова.

Взгляните на этот фрагмент из Readme:

Установите webRoot в каталог, из которого обслуживаются файлы. Мое приложение использует webpack, что означает, что мои локальные серверы запускаются с помощью webpack-dev-server, поэтому я зашел в документацию webpack-dev-server, чтобы увидеть, откуда он обслуживает мои файлы:

Немного покопавшись, я нашел то, что искал:

По умолчанию он будет использовать ваш текущий рабочий каталог для обслуживания контента…

Превосходно! В отладчике Chrome есть переменная для этого внутри launch.json с именем ${workspaceFoler}, поэтому моя конфигурация должна выглядеть так:

{
    "type": "chrome",
    "request": "launch",
    "name": "Launch Chrome against localhost",
    "url": "http://localhost:8082", // or whatever port you use
    "webRoot": "${workspaceFoler}"
}

Или, по крайней мере, я думал, что это сработает. За исключением того, что я выполнил рекомендацию в документации webpack для моей конфигурации webpack и установил context:

Установка контекста фактически изменяет путь для webpack-dev-server и, соответственно, расширения Chrome Debugger с ${workspaceFoler} на путь контекста, который для меня был /app (то же, что вы видите в документах выше). Итак, моя фактическая рабочая конфигурация:

{
    "type": "chrome",
    "request": "attach",
    "name": "Attach to Chrome",
    "port": 9222,
    "webRoot": "${workspaceFolder}/app"
},
{
    "type": "chrome",
    "request": "launch",
    "name": "Launch Chrome against localhost",
    "url": "http://localhost:8082",
    "webRoot": "${workspaceFolder}/app"
}

Я также добавил действие attach, которое использует ту же конфигурацию webRoot и позволяет вам подключаться к уже запущенному сеансу (при условии, что в экземпляре Chrome включен удаленный отладчик), что полезно для перехода в сеансы отладки и выхода из них.

Успех!

После этих шагов я начал работать с Chrome Debugger для VS Code, и теперь я весело удаляю точки останова прямо в своем редакторе, как будто я какой-то Java-разработчик, использующий IntelliJ. Я очень 🎉 взволнован 🎉 💯 отладкой внутри редактора. Это значительно ускоряет мой процесс и снижает часть умственного напряжения при отладке сложных проблем. Это определенно была классная вещь, которую я узнал, и я рад ею поделиться.