Отладка приложений ASP.NET Core

Примечание.

Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.

В этой статье описывается отладка приложений, включая отладку BlazorBlazor WebAssembly приложений с помощью средств разработчика браузера или интегрированной среды разработки (IDE).

Blazor Web App можно отлаживать в Visual Studio или Visual Studio Code.

Blazor WebAssembly приложения можно отладить:

  • В Visual Studio или Visual Studio Code.
  • Использование средств разработчика браузера в браузерах на основе Chromium, включая Microsoft Edge, Google Chrome и Firefox.

Доступные сценарии отладки Blazor WebAssembly :

  • Установите и удалите точки останова.
  • Запуск приложения с поддержкой отладки в IDE.
  • Пошаговое прохождение кода.
  • Возобновление выполнения кода с помощью сочетания клавиш в IDE.
  • Просмотр значений локальных переменных в окне Локальные переменные.
  • Просмотр стека вызовов, включая цепочки вызовов между JavaScript и .NET.
  • Используйте сервер символов для отладки, настроив его в параметрах Visual Studio.

Неподдерживаемые сценарии включают:

Blazor Server приложения можно отладить в Visual Studio или Visual Studio Code.

Blazor WebAssembly приложения можно отлаживать:

  • В Visual Studio или Visual Studio Code.
  • Использование средств разработчика браузера в браузерах на основе Chromium, включая Microsoft Edge и Google Chrome.

Неподдерживаемые сценарии для Blazor WebAssembly приложений:

  • Установите и удалите точки останова.
  • Запуск приложения с поддержкой отладки в IDE.
  • Пошаговое прохождение кода.
  • Возобновление выполнения кода с помощью сочетания клавиш в IDE.
  • Просмотр значений локальных переменных в окне Локальные переменные.
  • Просмотр стека вызовов, включая цепочки вызовов между JavaScript и .NET.
  • Отладка в нелокальных сценариях (например, подсистема Windows для Linux (WSL) или Visual Studio Codespaces).
  • Используйте сервер символов для отладки.

Blazor Server приложения можно отладить в Visual Studio или Visual Studio Code.

Blazor WebAssembly приложения можно отладить:

  • В среде Visual Studio или Visual Studio Code.
  • Использование средств разработчика браузера в браузерах на основе Chromium, включая Microsoft Edge и Google Chrome.

Неподдерживаемые сценарии для Blazor WebAssembly приложений:

  • Установите и удалите точки останова.
  • Запуск приложения с поддержкой отладки в IDE.
  • Пошаговое прохождение кода.
  • Возобновление выполнения кода с помощью сочетания клавиш в IDE.
  • Просмотр значений локальных переменных в окне Локальные переменные.
  • Просмотр стека вызовов, включая цепочки вызовов между JavaScript и .NET.
  • Останавливайтесь на точках останова во время запуска приложения до запуска прокси-сервера отладки. Сюда входят точки останова в файле Program и точки останова в методах жизненного цикла OnInitialized{Async} компонентов, которые загружаются первой страницей, запрашиваемой у приложения.
  • Отладка в нелокальных сценариях (например, подсистема Windows для Linux (WSL) или Visual Studio Codespaces).
  • Используйте сервер символов для отладки.

Предварительные требования

В этом разделе описываются предварительные требования для отладки.

Предварительные требования для браузера

Последняя версия следующих браузеров:

  • Google Chrome
  • Microsoft Edge
  • Firefox (только средства разработчика браузера)

Для отладки требуется последняя версия следующих браузеров:

  • Google Chrome (по умолчанию)
  • Microsoft Edge

Убедитесь, что брандмауэры или прокси-серверы не блокируют обмен данными с прокси-сервером отладки (процесс NodeJS). Дополнительные сведения см. в разделе Настройка брандмауэра.

Примечание.

В настоящее время Apple Safari в macOS не поддерживается.

Предварительные требования к интегрированной среде разработки

Требуется последняя версия Visual Studio или Visual Studio Code.

Предварительные требования Visual Studio Code

Для Visual Studio Code требуется пакет средств разработки C# для Visual Studio Code (начало работы с C# в VS Code). В Visual Studio Code Extensions Marketplace отфильтруйте список расширений с помощью "c# dev kit", чтобы найти расширение:

Набор средств разработки C# на Marketplace расширений Visual Studio Code

Установка комплекта разработки C# автоматически устанавливает следующие дополнительные расширения:

При возникновении предупреждений или ошибок можно открыть проблему (microsoft/vscode-dotnettools репозиторий GitHub), описывающую проблему.

Предварительные требования к конфигурации приложений

Руководство в этом подразделе относится к отладке на стороне клиента.

Properties/launchSettings.json Откройте файл запускаемого проекта. Подтвердите наличие следующего свойства inspectUri в каждом профиле запуска узла profiles файла. Если следующее свойство отсутствует, добавьте его в каждый профиль:

"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"

Свойство inspectUri:

  • Позволяет интегрированной среде разработки обнаруживать, что приложение является приложением Blazor.
  • Предписывает инфраструктуре отладки сценариев подключаться к браузеру через прокси-сервер отладки Blazor.

Прототипы значений для протокола WebSocket (wsProtocol), узла (url.hostname), порта (url.port) и URI инспектора в запущенном браузере (browserInspectUri) предоставляются платформой.

Пакеты

Blazor Web Apps: Microsoft.AspNetCore.Components.WebAssembly.Server: указывает на внутренний пакет (Microsoft.NETCore.BrowserDebugHost.Transport) для сборок, использующих общий хост отладки браузера.

Blazor Server: Microsoft.AspNetCore.Components.WebAssembly.Server: Ссылка на внутренний пакет (Microsoft.NETCore.BrowserDebugHost.Transport) для сборок, использующих общий узел отладки браузера.

Автономный режим Blazor WebAssembly: Microsoft.AspNetCore.Components.WebAssembly.DevServer: сервер разработки, используемый при создании приложений Blazor WebAssembly. Вызывает UseWebAssemblyDebugging на внутреннем уровне, чтобы добавить ПО промежуточного слоя для отладки приложений Blazor WebAssembly в средствах для разработчика Chromium.

Размещено Blazor WebAssembly:

Примечание.

Рекомендации по добавлению пакетов в приложения .NET см. в разделе Способы установки пакетов NuGet в статье Рабочий процесс использования пакета (документация по NuGet). Проверьте правильность версий пакета на сайте NuGet.org.

Отладка Blazor Web App в интегрированной среде разработки

В примере в этом разделе предполагается, что вы создали Blazor Web App с интерактивным режимом рендеринга Auto (Server и WebAssembly) и расположением интерактивности для каждого компонента.

  1. Запустите приложение.
  2. Задайте точку останова в currentCount++; строке компонента Counter (Pages/Counter.razor) клиентского проекта (.Client).
  3. При выборе проекта сервера в Обозреватель решений нажмите клавишу F5, чтобы запустить приложение в отладчике.
  4. В браузере перейдите на страницу Counter по адресу /counter. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку Нажми меня, чтобы дойти до точки останова.
  5. В Visual Studio просмотрите значение поля currentCount в окне Локальные переменные.
  6. Нажмите клавишу F5, чтобы продолжить выполнение.

Точки останова также могут срабатывать в серверном проекте в статически отрисовываемых и интерактивно отрисовываемых серверных компонентах.

  1. Остановите отладчик.
  2. В серверном приложении откройте компонент со статической отрисовкой Weather (Components/Pages/Weather.razor) и установите точку останова в любом месте метода OnInitializedAsync.
  3. Нажмите клавишу F5, чтобы запустить приложение в отладчике.
  4. В браузере перейдите на страницу Weather по адресу /weather. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Выполнение приложения останавливается в точке останова.
  5. Нажмите клавишу F5, чтобы продолжить выполнение.

Точки останова не срабатывают во время запуска приложения, пока не запущен прокси-сервер отладки. Сюда входят точки останова в файле Program и точки останова в методах жизненного цикла OnInitialized{Async} компонентов, которые загружаются первой страницей, запрашиваемой у приложения.

Отладьте Blazor Server приложение в IDE

  1. Запустите приложение.
  2. Установите точку останова на строке currentCount++; в компоненте Counter (Pages/Counter.razor).
  3. Нажмите клавишу F5, чтобы запустить приложение в отладчике.
  4. В браузере перейдите на страницу Counter по адресу /counter. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку Нажми меня, чтобы дойти до точки останова.
  5. В Visual Studio просмотрите значение поля currentCount в окне Локальные переменные.
  6. Нажмите клавишу F5, чтобы продолжить выполнение.

Точки останова не срабатывают во время запуска приложения, пока не запущен прокси-сервер отладки. Сюда входят точки останова в файле Program и точки останова в методах жизненного цикла OnInitialized{Async} компонентов, которые загружаются первой страницей, запрашиваемой у приложения.

Отладьте Blazor WebAssembly приложение в IDE

  1. Запустите приложение.
  2. Установите точку останова на строке currentCount++; в компоненте Counter (Pages/Counter.razor).
  3. Нажмите клавишу F5, чтобы запустить приложение в отладчике.
  4. В браузере перейдите на страницу Counter по адресу /counter. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку Нажми меня, чтобы дойти до точки останова.
  5. В Visual Studio просмотрите значение поля currentCount в окне Локальные переменные.
  6. Нажмите клавишу F5, чтобы продолжить выполнение.

Точки останова не срабатывают во время запуска приложения, пока не запущен прокси-сервер отладки. Сюда входят точки останова в файле Program и точки останова в методах жизненного цикла OnInitialized{Async} компонентов, которые загружаются первой страницей, запрашиваемой у приложения.

Отладка размещенного приложения в интегрированной среде разработки Blazor WebAssembly

  1. Выбрав проект Server в Обозревателе решений, нажмите клавишу F5, чтобы запустить приложение в отладчике.

    При отладке браузера на основе Chromium, например Google Chrome или Microsoft Edge, откроется новое окно браузера с отдельным профилем для сеанса отладки, а не вкладка в существующем окне с профилем пользователя. Если требуется отладка с профилем пользователя, примените один из следующих подходов:

  2. Client В проекте задайте точку останова в currentCount++; строке Counter компонента (Pages/Counter.razor).

  3. В браузере перейдите на страницу Counter по адресу /counter. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку Нажми меня, чтобы дойти до точки останова.

  4. В Visual Studio просмотрите значение поля currentCount в окне Локальные переменные.

  5. Нажмите клавишу F5, чтобы продолжить выполнение.

Вы также можете отлаживать код сервера в проекте Server:

  1. Установите точку останова на странице Pages/FetchData.razor в OnInitializedAsync.
  2. Установите точку останова в WeatherForecastController в методе действия Get.
  3. Перейдите на страницу Fetch Data, чтобы попасть в первую точку останова в компоненте FetchData непосредственно перед отправкой HTTP-запроса на сервер.
  4. Нажмите клавишу F5, чтобы продолжить выполнение, а затем дойдите до точки останова на сервере в WeatherForecastController.
  5. Нажмите клавишу F5 еще раз, чтобы продолжить выполнение и увидеть отрисовку таблицы с прогнозом погоды в браузере.

Точки останова не срабатывают во время запуска приложения, пока не запущен прокси-сервер отладки. Сюда входят точки останова в файле Program и точки останова в методах жизненного цикла OnInitialized{Async} компонентов, которые загружаются первой страницей, запрашиваемой у приложения.

Подключиться к существующему сеансу отладки Visual Studio Code

Чтобы подключиться к работающему Blazor приложению, откройте .vscode/launch.json файл и замените {URL} заполнитель URL-адресом, в котором выполняется приложение:

{
  "name": "Attach and Debug",
  "type": "blazorwasm",
  "request": "attach",
  "url": "{URL}"
}

Параметры запуска Visual Studio Code

Параметры конфигурации запуска в следующей blazorwasm таблице поддерживаются для типа отладки (.vscode/launch.json).

Вариант Описание
browser Браузер для запуска сеанса отладки. Задайте edge или chrome. По умолчанию — edge.
cwd Рабочий каталог, из которого запускается приложение.
request Используйте launch, чтобы запустить и подключить сеанс отладки к приложению Blazor WebAssembly, или attach, чтобы подключить сеанс отладки к уже работающему приложению.
timeout Время ожидания в миллисекундах до подключения к сеансу отладки. По умолчанию — 30 000 миллисекунд (30 секунд).
trace Используется для создания логов с помощью отладчика JS. Задано значение true, чтобы создавались журналы.
url URL-адрес для открытия в браузере при отладке.
webRoot Указывает полный путь к веб-серверу. Если приложение обслуживается с использованием подмаршрута, необходимо указать значение для этого параметра.

Дополнительные параметры в следующей таблице применяются только к размещенным приложениямBlazor WebAssembly.

Вариант Описание
env Переменные среды, которые должны быть предоставлены запущенному процессу. Применимо, только если для параметра hosted задано значение true.
hosted При запуске и отладке размещенного приложения Blazor WebAssembly необходимо установить значение true.
program Ссылка на исполняемый файл для запуска сервера размещенного приложения. Должно быть задано, если для hosted установлено значение true.

Отладка Blazor WebAssembly с помощью Google Chrome или Microsoft Edge

В этом разделе описано, как применить отладку Blazor WebAssembly приложений:

  • Google Chrome, работающий в Windows или macOS.
  • Microsoft Edgeработает в Windows.
  1. Запустите приложение в командной оболочке с dotnet watch (или dotnet run).

  2. Запустите браузер и перейдите по URL-адресу приложения.

  3. Запустите удаленную отладку, нажав клавишу:

    • Shift+Alt+d в Windows.
    • Shift++d в macOS.

    Браузер должен работать с включенной удаленной отладкой (это не поведение по умолчанию). Если удаленная отладка отключена, отобразится страница с ошибкой Не удается найти вкладку браузера для отладки с инструкциями по запуску браузера с открытым портом отладки. Следуйте инструкциям в браузере.

    После выполнения инструкций по включению удаленной отладки приложение открывается в новом окне браузера. Запустите удаленную отладку, нажав сочетание HotKey в новом окне браузера:

    • Shift+Alt+d в Windows.
    • Shift++d на macOS.

    Открывается новая вкладка в инструментах разработчика браузера, на которой отображается полупрозрачное изображение приложения.

    Примечание.

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

  4. Через некоторое время на вкладке "Источники" отображается список сборок и страниц приложения .NET.

  5. Откройте узел file://. В коде компонентов (в файлах .razor) и в файлах кода C# (.cs) установленные вами точки останова срабатывают при выполнении кода на вкладке браузера приложения (на исходной вкладке, открытой после запуска удаленной отладки). После срабатывания точки останова на вкладке отладки можно пошагово выполнять код (F10) или возобновить выполнение кода в обычном режиме (F8).

Для отладки браузеров на основе Chromium Blazor предоставляет прокси-сервер отладки, реализующий Chrome DevTools Protocol и дополняющий этот протокол сведениями, относящимися к .NET. При нажатии сочетания клавиш для отладки Blazor указывает Chrome DevTools на прокси-сервер. Прокси-сервер подключается к окну браузера, для которого выполняется отладка (поэтому и надо было включить удаленную отладку).

Отладка Blazor WebAssembly приложения с помощью Firefox

В этом разделе описано, как применить отладку Blazor WebAssembly приложений в Firefox, работающих в Windows.

Отладка приложения Blazor WebAssembly с помощью Firefox требует настройки браузера для удаленной отладки и подключения к нему через средства разработчика браузера и прокси-сервер отладки .NET WebAssembly.

Примечание.

Отладка в Firefox из Visual Studio в настоящее время не поддерживается.

Отладка Blazor WebAssembly приложения в Firefox во время разработки:

  1. Настройка Firefox:
    • Откройте about:config на новой вкладке браузера. Прочтите и закройте предупреждение, которое появится.
    • Включите devtools.debugger.remote-enabled , задав для нее значение True.
    • Включите devtools.chrome.enabled , задав для нее значение True.
    • Отключите devtools.debugger.prompt-connection , задав для нее значение False.
  2. Закройте все окна Firefox.
  3. Запустите приложение в командной оболочке с dotnet watch (или dotnet run).
  4. Повторно запустите браузер Firefox и перейдите к приложению.
  5. Откройте about:debugging новую вкладку браузера. Оставьте эту вкладку открытой.
  6. Вернитесь на вкладку, на которой запущено приложение. Запустите удаленную отладку, нажав клавиши Shift+Alt+d.
  7. На вкладке Debugger откройте исходный файл приложения, который вы хотите отладить под file:// узлом, и установите точку останова. Например, задайте точку останова в currentCount++; строке в IncrementCount методе Counter компонента (Pages/Counter.razor).
  8. Перейдите на страницу компонента Counter (/counter) на вкладке браузера приложения и нажмите кнопку счётчика, чтобы сработала точка останова.
  9. Нажмите клавишу F5 , чтобы продолжить выполнение на вкладке отладки.

Разрыв с необработанными исключениями

Отладчик не останавливается на необработанных исключениях, так как Blazor перехватывает исключения, которые не обрабатываются кодом разработчика.

Чтобы разорвать необработанные исключения, выполните приведенные действия.

  • Откройте параметры исключений отладчика (Отладка>Окна>Параметры исключений) в Visual Studio.
  • Задайте следующие параметры исключений JavaScript:
    • Все исключения
    • Неуловимые исключения

Карты исходного кода в браузере

Сопоставители с исходным кодом в браузере позволяют браузеру сопоставлять скомпилированные файлы с исходными файлами и обычно используются для отладки на стороне клиента. В настоящее время Blazor не сопоставляет C# напрямую с JavaScript/Wasm. Вместо этого Blazor интерпретирует IL в браузере, поэтому карты исходного кода не имеют значения.

Настройка брандмауэра

Если брандмауэр блокирует обмен данными с прокси-сервером отладки, создайте правило исключения брандмауэра, которое разрешает обмен данными между браузером и процессом NodeJS.

Предупреждение

Чтобы избежать создания уязвимостей в области безопасности, необходимо внести изменения в конфигурацию брандмауэра. Старательно применяйте рекомендации по безопасности, следуйте рекомендациям по обеспечению безопасности и учитывайте предупреждения, выдаваемые производителем брандмауэра.

Разрешение открытого взаимодействия с процессом NodeJS:

  • Открывает сервер узла для любого подключения в зависимости от возможностей и конфигурации брандмауэра.
  • Может быть рискованным в зависимости от вашей сети.
  • Рекомендуется использовать только на компьютерах разработчиков.

Если возможно, разрешайте открытый обмен данными с NodeJS процессом только в доверенных или частных сетях.

Инструкции по настройке брандмауэра Windows см. в статье Создание правила для входящего трафика для программы или службы. Дополнительные сведения см. в статье Брандмауэр Защитника Windows с расширенными функциями безопасности и в связанных статьях в наборе документации по брандмауэру Windows.

Устранение неполадок

При возникновении ошибок воспользуйтесь следующими советами:

  • Удалите точки останова:
    • Google Chrome: на вкладке "Отладчик " откройте средства разработчика в браузере. В консоли выполните localStorage.clear(), чтобы удалить все точки останова.
    • Microsoft Edge: на вкладке "Приложение " откройте локальное хранилище. Щелкните правой кнопкой мыши сайт и нажмите кнопку "Очистить".
  • Убедитесь, что вы установили и доверяете HTTPS-сертификату разработки ASP.NET Core. Дополнительные сведения см. в статье Принудительное применение HTTPS в ASP.NET Core.
  • Visual Studio требует, чтобы был включен параметр Включить отладку JavaScript для ASP.NET (Chrome и Edge) в разделе Сервис>Параметры>Отладка>Общие. Этот параметр включен в Visual Studio по умолчанию. Если отладка не работает, проверьте, выбран ли этот параметр.
  • Если в среде используется прокси-сервер HTTP, необходимо включить localhost в параметры обхода прокси-сервера. Это можно сделать, задав NO_PROXY переменную среды в следующих параметрах:
    • Файл launchSettings.json для проекта.
    • на уровне пользовательских или системных переменных среды для применения ко всем приложениям. Перезапустите Visual Studio, чтобы изменение переменной среды вступило в силу.
  • Убедитесь, что брандмауэры или прокси-серверы не блокируют обмен данными с прокси-сервером отладки (процесс NodeJS). Дополнительные сведения см. в разделе Настройка брандмауэра.

Точки останова в OnInitialized{Async} не срабатывают

Отладочный прокси-сервер фреймворка Blazor не запускается мгновенно при запуске приложения, поэтому точки останова в OnInitialized{Async} методах жизненного цикла могут не сработать. Мы рекомендуем добавить задержку в начале тела метода, чтобы отладочный прокси успел запуститься до срабатывания точки останова. Вы можете добавить задержку с помощью ifдирективы компилятора, чтобы в релизной сборке приложения этой задержки не было.

OnInitialized:

protected override void OnInitialized()
{
#if DEBUG
    Thread.Sleep(10000);
#endif

    ...
}

OnInitializedAsync:

protected override async Task OnInitializedAsync()
{
#if DEBUG
    await Task.Delay(10000);
#endif

    ...
}

истекло время ожидания Visual Studio (Windows)

Если Visual Studio вызывает исключение о том, что не удалось запустить адаптер отладки, указав, что истекло время ожидания, то можно настроить время ожидания с помощью параметра реестра.

VsRegEdit.exe set "<VSInstallFolder>" HKCU JSDebugger\Options\Debugging "BlazorTimeoutInMilliseconds" dword {TIMEOUT}

Заполнитель {TIMEOUT} в предыдущей команде выражается в миллисекундах. Например, одной минуте соответствует значение 60000.

Управление горячей перезагрузкой

Свойство WasmEnableHotReload MSBuild активирует горячую перезагрузку и по умолчанию устанавливается в значение true при сборке в конфигурации Debug. Горячая перезагрузка не включена (задана false) при сборке в любой другой конфигурации.

Чтобы использовать пользовательское имя конфигурации при отладке, например, DebugWebAssembly, установите свойство true, чтобы включить горячую перезагрузку.

<PropertyGroup>
  <WasmEnableHotReload>true</WasmEnableHotReload>
</PropertyGroup>

Чтобы отключить горячую перезагрузку для Debug конфигурации, задайте для параметра значение false:

<PropertyGroup>
  <WasmEnableHotReload>false</WasmEnableHotReload>
</PropertyGroup>