Как остановить Blazor от ловли исключений? - PullRequest
0 голосов
/ 04 апреля 2020

Я разрабатываю серверное приложение Blazor в Visual Studio, мое приложение использует веб-сервер Kestrel. Я могу использовать отладчик, я пытаюсь использовать его по крайней мере. Когда я устанавливаю любую точку останова в любой точке моего кода, точка останова срабатывает, отображается отладчик Visual Studio, все работает, как в любом другом приложении NORMAL. NET.

Я пытаюсь добиться исследования / отладить исключение, которое выдается в моем C# коде в приложении Blazor. Собственно - это компонент кода. Я нажимаю кнопку в пользовательском интерфейсе приложения, вызывается обработчик событий, он начинает выполнять код, я могу вставить точку останова, чтобы VS остановил выполнение программы и показал строку с точкой останова, значениями переменных и всем остальным. Странно, я даже объясняю это.

Однако, если в моей программе происходит исключение, отладчик Visual Studio НЕ отображается. Исключение перехвачено в Blazor и отображается вместо консоли. Это делает отладку приложения очень утомительной и раздражающей рутиной. Это также увеличивает время разработки примерно в 10 раз, по крайней мере.

Я почти уверен, что Blazor не может быть настолько глупым, и должна быть опция, позволяющая нормально его отлаживать, используя отладчик, который уже подключен и работает , Поймать ошибки и записать их в консоль или другой журнал имеет смысл для развернутого / выпущенного приложения. Для разработки, особенно в сеансе отладки в Visual Studio - исключения должны быть отправлены отладчику. Поэтому должна быть опция, позволяющая включить такое базовое c поведение, я прав?

Ставлю на appsettings. json file.

Я потратил несколько часов, пытаясь найти эту информацию в Google и Microsoft Docs, но, похоже, я первый человек в мире, который спрашивает об этом, или я просто не могу понять правильный вопрос, или ...

Я действительно первый человек в Мир пытается использовать отладчик Visual Studio для отладки исключений в моем коде. Я имею в виду в Blazor. Потому что я искал «Отладка исключений в Visual Studio», и она возвращает очевидные (по крайней мере для меня) результаты, такие как изображения отладчика VS, показывающие исключения. Но если я добавлю только «Blazor» к вопросу, результаты будут просто сумасшедшими и совершенно не связанными.

Забавный факт: при использовании NavigationManager.NavigateTo("/Identity/Account/Login") в моем коде Visual Studio фактически останавливается на исключении, что на самом деле не является исключение. Я имею в виду, что разработчики Blazor на GitHub говорят, что исключение - это обычный способ его работы. Функция не ошибка. Поэтому, когда мое приложение выполняет обычную, ожидаемую работу и работает полностью нормально - отладчик Visual Studio внезапно отображается, и я вижу исключение, которое меня не волнует. Когда моя программа выполняет недопустимую операцию (возникает REAL исключение) - отладчик Visual Studio не отображается. Событие скрыто, и я должен либо угадать, что произошло, либо написать дополнительный код для расследования. Если это не сумасшествие, я не знаю, что это такое.

Кстати, я знаю, что есть обходные пути. Мне неинтересно. Я могу использовать Debug.Print, я могу вставить точку останова и шаг за шагом проанализировать исполняемый код. Я просто хочу, чтобы отладчик запускался по назначению, автоматически, без скрытия исключений.

1 Ответ

1 голос
/ 05 апреля 2020

Работает как задумано :). Blazor или любой другой asp. net каркас имеет блок try / catch где-то в потоке обработки запросов. Это просто не завершать целое приложение, если выбрасывается какое-либо исключение. Таким образом, исключение перехватывается, и отладчик не сообщает вам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...