Подтвердить что ты не робот

VS 17 нарушает все исключения

Visual Studio 2017 (внезапно) разрушает все исключения. Это означает, что если я деактивирую их в настройках исключений (нажимая CTRL + ALT + E во время отладки), отладчик все равно ломается. Я не знаю, является ли это просто ошибкой VS, которую я не могу изменить, и поэтому приходится с ней жить, или же есть простое решение для этого.

Это окно настроек исключения: the exception settings

и это исключение VS разбивается на: the exception

Кстати, я также пробовал этот прекрасный минус (ничего не происходит, если я нажимаю на него) или добавлял невозможное условие (VS все еще нарушал исключение).

Я также протестировал другие исключения (просто выбрасывая их), которые я ранее деактивировал, и они также были выброшены, и я протестировал ту же проблему в других проектах, где она также появилась: the issue in other projects

На самом деле я даже поместил весь материал в оператор try catch, но VS все еще ломается:

InitializeComponent ();
try
{
    var t = new Thread (() =>
    {
        while (!IsHandleCreated) {} //It breaks here (similiar to the screenshots)
        while (true)
            Invoke (new Action (() => Size = new Size ()));
    });
    while (true)
    {
        t.Start ();
        Thread.Sleep (100);
        t.Abort ();
    }
}
catch (ThreadAbortException) { }

Он не отображается в других средах разработки (например, Rider) на моем ПК и не встречается на других ПК в VS. Это не всегда происходило на моем ПК, оно только началось недавно и только в режиме отладки. И если я продолжу выполнение (с помощью F5), оно просто продолжится нормально.

РЕДАКТИРОВАТЬ Когда я поместил try-catch внутри потока, он вел себя немного по-другому (извините за то, что выложил сюда картинки, но я думаю, что в этом случае они более выразительны): new exception location

Кто-нибудь может объяснить это поведение?

РЕДАКТИРОВАТЬ Кажется нормальным, чтобы ThreadAbortExceptions снова прерывался в конце оператора catch. Тем не менее, VS все равно не должен нарушать это исключение.

4b9b3361

Ответ 1

У меня была аналогичная проблема.

Я исправил это, сняв флажок "Перерыв, когда исключения пересекаются с AppDomain или управляемыми/собственными границами" в Инструменты > Параметры > Отладкa > Общие

Ответ 2

Я не могу подтвердить, происходит ли это с другими типами проектов, но это происходит со мной последовательно (Visual Studio Tools для Python) VSTP.

Несмотря на то, что он менее чем удовлетворительный, он может по крайней мере заставить замолчать исключения и позволить вам продолжать работать в мире, пока не появится лучшее решение. В моем случае было почти невозможно отладить мой код, поскольку StopIteration прерывается на каждой итерации.

Выберите "Отладка" > "Windows" > "Исключения" или нажмите Ctrl-Alt-E. У

Настройки исключений

Щелкните правой кнопкой мыши в любом месте окна и выберите "Показать столбцы" > "Дополнительные действия". Появится столбец "Дополнительные действия", если он еще не установлен.

Щелкните правой кнопкой мыши на конкретном исключении, которое вы хотите отключить, или установите флажок верхнего уровня, чтобы выбрать целую категорию исключений, то есть исключения на Python. Нажмите "Продолжить", когда "Не обрабатывается в пользовательском коде".

Повторите для каждого дополнительного исключения или категории исключений.

Ответ 3

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

Ответ 4

Я исправил это, сняв Enable Just My Code в Инструменты> Параметры> Отладка> Общие