Отладка приложений ASP.NET Core
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
В этой статье описывается отладка приложений, включая отладку Blazor Blazor 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.
Неподдерживаемые сценарии включают:
- Отладка в нелокальных сценариях (например, в подсистеме Windows для Linux (WSL) или Visual Studio Codespaces).
- Отладка в Firefox из Visual Studio или Visual Studio Code.
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# автоматически устанавливает следующие дополнительные расширения:
При возникновении предупреждений или ошибок можно открыть проблему (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
) предоставляются платформой.
Packages
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 приложений. Вызывает UseWebAssemblyDebugging на внутреннем уровне, чтобы добавить ПО промежуточного слоя для отладки приложений Blazor WebAssembly в средствах для разработчика Chromium.
Размещенное решение Blazor WebAssembly:
- Проект Client:
Microsoft.AspNetCore.Components.WebAssembly.DevServer
: сервер разработки, который следует использовать при компиляции приложений Blazor. Вызывает UseWebAssemblyDebugging на внутреннем уровне, чтобы добавить ПО промежуточного слоя для отладки приложений Blazor WebAssembly в средствах для разработчика Chromium. - Проект Server:
Microsoft.AspNetCore.Components.WebAssembly.Server
: ссылается на внутренний пакет (Microsoft.NETCore.BrowserDebugHost.Transport
) для сборок, которые совместно используют узел отладки браузера.
Примечание.
Рекомендации по добавлению пакетов в приложения .NET см. в разделе Способы установки пакетов NuGet в статье Рабочий процесс использования пакета (документация по NuGet). Проверьте правильность версий пакета на сайте NuGet.org.
Отладка Blazor Web App в интегрированной среде разработки
В примере в этом разделе предполагается, что вы создали Blazor Web App интерактивный режим отрисовки авто (сервер и webAssembly) и интерактивное расположение для каждого компонента.
- Запустите приложение.
- Задайте точку останова в
currentCount++;
строке компонентаCounter
(Pages/Counter.razor
) клиентского проекта (.Client
). - При выборе проекта сервера в Обозреватель решений нажмите клавишу F5, чтобы запустить приложение в отладчике.
- В браузере перейдите на страницу
Counter
по адресу/counter
. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку "Щелкнуть меня", чтобы выбрать точку останова. - В Visual Studio просмотрите значение поля
currentCount
в окне Локальные переменные. - Нажмите клавишу F5, чтобы продолжить выполнение.
Точки останова также можно попасть в проект сервера в статически отрисованных и интерактивных серверных компонентах.
- Остановите отладчик.
- В серверном приложении откройте статически отрисованный
Weather
компонент (Components/Pages/Weather.razor
) и установите точку останова вOnInitializedAsync
любом месте метода. - Нажмите клавишу F5, чтобы запустить приложение в отладчике.
- В браузере перейдите на страницу
Weather
по адресу/weather
. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Выполнение приложения останавливается в точке останова. - Нажмите клавишу F5, чтобы продолжить выполнение.
Попадание в точки останова не происходит во время запуска приложения перед запуском прокси-сервера отладки. Сюда входят точки останова в файле и точках останова в Program
OnInitialized{Async}
методах жизненного цикла компонентов, загруженных первой страницей, запрошенной приложением.
Отладка приложения в интегрированной Blazor Server среде разработки
- Запустите приложение.
- Задайте точку останова в строке
currentCount++;
Counter
компонента (Pages/Counter.razor
). - Нажмите клавишу F5, чтобы запустить приложение в отладчике.
- В браузере перейдите на страницу
Counter
по адресу/counter
. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку "Щелкнуть меня", чтобы выбрать точку останова. - В Visual Studio просмотрите значение поля
currentCount
в окне Локальные переменные. - Нажмите клавишу F5, чтобы продолжить выполнение.
Попадание в точки останова не происходит во время запуска приложения перед запуском прокси-сервера отладки. Сюда входят точки останова в файле и точках останова в Program
OnInitialized{Async}
методах жизненного цикла компонентов, загруженных первой страницей, запрошенной приложением.
Отладка приложения в интегрированной Blazor WebAssembly среде разработки
- Запустите приложение.
- Задайте точку останова в строке
currentCount++;
Counter
компонента (Pages/Counter.razor
). - Нажмите клавишу F5, чтобы запустить приложение в отладчике.
- В браузере перейдите на страницу
Counter
по адресу/counter
. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку "Щелкнуть меня", чтобы выбрать точку останова. - В Visual Studio просмотрите значение поля
currentCount
в окне Локальные переменные. - Нажмите клавишу F5, чтобы продолжить выполнение.
Попадание в точки останова не происходит во время запуска приложения перед запуском прокси-сервера отладки. Сюда входят точки останова в файле и точках останова в Program
OnInitialized{Async}
методах жизненного цикла компонентов, загруженных первой страницей, запрошенной приложением.
Отладка размещенного приложения в интегрированной среде разработки Blazor WebAssembly
Выбрав проект Server в Обозревателе решений, нажмите клавишу F5, чтобы запустить приложение в отладчике.
При отладке браузера на основе Chromium, например Google Chrome или Microsoft Edge, откроется новое окно браузера с отдельным профилем для сеанса отладки, а не вкладка в существующем окне с профилем пользователя. Если требуется отладка с профилем пользователя, примените один из следующих подходов:
- Закройте все открытые экземпляры браузера, затем нажмите клавишу F5, чтобы начать отладку.
- Настройте Visual Studio, чтобы запустить браузер с профилем пользователя. Дополнительные сведения об этом подходе см. по ссылке Blazor Отладка WASM в Visual Studio запускает Edge с отдельным каталогом пользовательских данных (dotnet/aspnetcore #20915).
Client В проекте задайте точку останова в
currentCount++;
строкеCounter
компонента (Pages/Counter.razor
).В браузере перейдите на страницу
Counter
по адресу/counter
. Подождите несколько секунд, пока отладочный прокси-сервер будет загружен и запущен. Нажмите кнопку "Щелкнуть меня", чтобы выбрать точку останова.В Visual Studio просмотрите значение поля
currentCount
в окне Локальные переменные.Нажмите клавишу F5, чтобы продолжить выполнение.
Вы также можете выполнить отладку Server кода сервера в проекте:
- Установите точку останова на странице
Pages/FetchData.razor
в OnInitializedAsync. - Установите точку останова в
WeatherForecastController
в методе действияGet
. - Перейдите на страницу
Fetch Data
, чтобы попасть в первую точку останова в компонентеFetchData
непосредственно перед отправкой HTTP-запроса на сервер. - Нажмите клавишу F5, чтобы продолжить выполнение, и попадите в точку останова на сервере в
WeatherForecastController
. - Нажмите клавишу F5 еще раз, чтобы продолжить выполнение и увидеть отрисовку таблицы с прогнозом погоды в браузере.
Попадание в точки останова не происходит во время запуска приложения перед запуском прокси-сервера отладки. Сюда входят точки останова в файле и точках останова в Program
OnInitialized{Async}
методах жизненного цикла компонентов, загруженных первой страницей, запрошенной приложением.
Запуск без отладки [CTRL+F5 (Windows) или ⌘+F5 (macOS)] не поддерживается. При запуске приложения в конфигурации отладки затраты на отладку всегда приводят к небольшому снижению производительности.
Присоединение к существующему сеансу отладки 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.
Запустите приложение в командной оболочке с
dotnet watch
(илиdotnet run
).Запустите браузер и перейдите по URL-адресу приложения.
Запустите удаленную отладку, нажав клавишу:
- Shift+Alt+d в Windows.
- Shift'd++ в macOS.
Браузер должен работать с включенной удаленной отладкой (это не поведение по умолчанию). Если удаленная отладка отключена, отобразится страница с ошибкой Не удается найти вкладку браузера для отладки с инструкциями по запуску браузера с открытым портом отладки. Следуйте инструкциям в браузере.
После выполнения инструкций по включению удаленной отладки приложение открывается в новом окне браузера. Запустите удаленную отладку, нажав сочетание HotKey в новом окне браузера:
- Shift+Alt+d в Windows.
- Shift'd++ в macOS.
Откроется вкладка браузера инструментов разработчика окна с изображением фантомного изображения приложения.
Примечание.
Если вы следовали инструкциям, чтобы открыть новую вкладку браузера с включенной удаленной отладкой, можно закрыть исходное окно браузера, оставив второе окно открытым с первой вкладкой, на которой запущено приложение, и на второй вкладке, на которой запущен отладчик.
Через некоторое время на вкладке "Источники" отображается список сборок и страниц приложения .NET.
Откройте узел
file://
. В коде компонента (.razor
файлах) и файлах кода C# (.cs
), точек останова, заданных при выполнении кода на вкладке браузера приложения (начальная вкладка, открытая после запуска удаленной отладки). После нажатия точки останова одношаговый (F10) через код или выполнение кода возобновления (F8) обычно на вкладке отладки.
Для отладки браузера на основе Chromium предоставляется прокси-сервер отладки, Blazor реализующий протокол Chrome DevTools и расширяющий протокол с помощью . Сведения, относящиеся к NET. При нажатии сочетания клавиш для отладки Blazor указывает Chrome DevTools на прокси-сервер. Прокси-сервер подключается к окну браузера, для которого выполняется отладка (поэтому и надо было включить удаленную отладку).
Отладка Blazor WebAssembly приложения с помощью Firefox
В этом разделе описано, как применить отладку Blazor WebAssembly приложений в Firefox, работающих в Windows.
Blazor WebAssembly Отладка приложения с помощью Firefox требует настройки браузера для удаленной отладки и подключения к браузеру с помощью средств разработчика браузера с помощью прокси-сервера отладки .NET WebAssembly.
Примечание.
Отладка в Firefox из Visual Studio в настоящее время не поддерживается.
Отладка Blazor WebAssembly приложения в Firefox во время разработки:
- Настройка Firefox:
- Откройте
about:config
на новой вкладке браузера. Прочтите и закройте предупреждение, которое появится. - Включите
devtools.debugger.remote-enabled
, задав для нее значениеTrue
. - Включите
devtools.chrome.enabled
, задав для нее значениеTrue
. - Отключите
devtools.debugger.prompt-connection
, задав для нее значениеFalse
.
- Откройте
- Закройте все экземпляры Firefox.
- Запустите приложение в командной оболочке с
dotnet watch
(илиdotnet run
). - Повторно запустите браузер Firefox и перейдите к приложению.
- Откройте
about:debugging
новую вкладку браузера. Оставьте эту вкладку открытой. - Вернитесь на вкладку, на которой запущено приложение. Запустите удаленную отладку, нажав клавиши SHIFT+ALT+D.
- На вкладке
Debugger
откройте исходный файл приложения, который вы хотите отладить подfile://
узлом, и установите точку останова. Например, задайте точку останова вcurrentCount++;
строке вIncrementCount
методеCounter
компонента (Pages/Counter.razor
). - Перейдите
Counter
на страницу компонента (/counter
) на вкладке браузера приложения и нажмите кнопку счетчика, чтобы попасть в точку останова. - Нажмите клавишу F5 , чтобы продолжить выполнение на вкладке отладки.
Разрыв с необработанными исключениями
Отладчик не прерывает необработанные исключения, так как Blazor перехватывает исключения, необработанные кодом разработчика.
Чтобы разорвать необработанные исключения, выполните приведенные действия.
- Откройте параметры исключений отладчика (отладка>параметров исключений Windows>) в Visual Studio.
- Задайте следующие параметры исключений JavaScript:
- Все исключения
- Неуловимые исключения
Сопоставители с исходным кодом в браузере
Сопоставители с исходным кодом в браузере позволяют браузеру сопоставлять скомпилированные файлы с исходными файлами и обычно используются для отладки на стороне клиента. Однако Blazor в настоящее время не сопоставляет C# напрямую с JavaScript/WASM. Вместо этого Blazor выполняет интерпретацию IL в браузере, поэтому сопоставление с исходным кодом не актуально.
Настройка брандмауэра
Если брандмауэр блокирует обмен данными с прокси-сервером отладки, создайте правило исключения брандмауэра, которое разрешает обмен данными между браузером и процессом NodeJS
.
Предупреждение
Чтобы избежать создания уязвимостей в области безопасности, необходимо внести изменения в конфигурацию брандмауэра. Старательно применяйте рекомендации по безопасности, следуйте рекомендациям по обеспечению безопасности и учитывайте предупреждения, выдаваемые производителем брандмауэра.
Разрешение начала обмена данными с NodeJS
процессом:
- Открывает сервер узла для любого подключения в зависимости от возможностей и конфигурации брандмауэра.
- Может быть рискованным в зависимости от вашей сети.
- Рекомендуется использовать только на компьютерах разработчиков.
Если возможно, разрешайте открытый обмен данными с NodeJS
процессом только в доверенных или частных сетях.
Инструкции по настройке брандмауэра Windows см. в статье Создание правила для входящего трафика для программы или службы. Дополнительные сведения см. в статье Брандмауэр Защитника Windows с расширенными функциями безопасности и в связанных статьях в наборе документации по брандмауэру Windows.
Устранение неполадок
При возникновении ошибок воспользуйтесь следующими советами:
- Удалите точки останова:
- Google Chrome: на вкладке "Отладчик " откройте средства разработчика в браузере. В консоли выполните
localStorage.clear()
, чтобы удалить все точки останова. - Microsoft Edge: на вкладке "Приложение " откройте локальное хранилище. Щелкните правой кнопкой мыши сайт и нажмите кнопку "Очистить".
- Google Chrome: на вкладке "Отладчик " откройте средства разработчика в браузере. В консоли выполните
- Убедитесь, что вы установили и сделали доверенным сертификат разработки HTTPS ASP.NET Core. Дополнительные сведения см. в статье Принудительное использование HTTPS.
- Visual Studio требует включения отладки JavaScript для ASP.NET (Chrome и Edge) в разделе "Параметры>отладки>инструментов".> Этот параметр включен в Visual Studio по умолчанию. Если отладка не работает, проверьте, выбран ли этот параметр.
- Если в среде используется прокси-сервер HTTP, необходимо включить
localhost
в параметры обхода прокси-сервера. Это можно сделать, задавNO_PROXY
переменную среды в следующих параметрах:- файл
launchSettings.json
проекта; - на уровне пользовательских или системных переменных среды для применения ко всем приложениям. Перезапустите Visual Studio, чтобы изменение переменной среды вступило в силу.
- файл
- Убедитесь, что брандмауэры или прокси-серверы не блокируют обмен данными с прокси-сервером отладки (процесс
NodeJS
). Дополнительные сведения см. в разделе Настройка брандмауэра.
Точки останова в OnInitialized{Async}
не срабатывают
Blazor Прокси-сервер отладки платформы не запускается мгновенно при запуске приложения, поэтому точки останова в OnInitialized{Async}
методах жизненного цикла могут не попасть. Мы рекомендуем добавить задержку в начале тела метода, чтобы прокси-сервер отладки успел запуститься до срабатывания точки останова. Вы можете включить задержку на основе директивы компилятора if
, чтобы обеспечить отсутствие задержки для конечной сборки приложения.
protected override void OnInitialized()
{
#if DEBUG
Thread.Sleep(10000);
#endif
...
}
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
.
ASP.NET Core