Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Исключение — это указание состояния ошибки, возникающего во время выполнения программы. Вы можете указать отладчику, на каких исключениях или наборах исключений следует остановиться, и в какой момент следует это сделать (то есть приостановить выполнение программы в отладчике). При остановке отладчика отображается, где было вызвано исключение. Кроме того, можно добавлять или удалять исключения. При открытом решении в Visual Studio используйте "Отладка > Windows >" параметры исключений, чтобы открыть окно «Параметры исключений».
Создайте обработчики, реагирующие на наиболее важные исключения. Если вам нужно знать, как добавлять обработчики исключений, см. статью "Исправление ошибок путем написания лучшего кода C#". Кроме того, узнайте, как настроить отладчик, чтобы всегда прерывать выполнение при возникновении некоторых исключений.
При возникновении исключения отладчик записывает в окно вывода сообщение об исключении. Это может нарушить выполнение в следующих случаях, если:
- Выбрасывается исключение, которое не обрабатывается.
- Отладчик настраивается для прерывания выполнения перед вызовом любого обработчика.
- Вы включили Just My Code, и отладчик настроен на остановку при любом исключении, которое не обработано в пользовательском коде.
Замечание
ASP.NET имеет обработчик исключений верхнего уровня, показывающий страницы ошибок в браузере. Он не прерывает выполнение, если только не включен только мой код . Пример см. в разделе "Сообщить отладчику продолжить использование необработанных пользователем исключений " ниже.
Замечание
В приложении Visual Basic отладчик обрабатывает все ошибки как исключения, даже если вы используете обработчики ошибок в стиле On Error.
Сообщите отладчику остановиться при возникновении исключения
Отладчик может разорвать выполнение в точке возникновения исключения, поэтому перед вызовом обработчика можно проверить исключение.
В окне "Параметры исключений" (отладка > параметров исключений Windows>) разверните узел для категории исключений, таких как исключения среды CLR. Затем установите флажок для определенного исключения в этой категории, например System.AccessViolationException. Вы также можете выбрать всю категорию исключений.
Подсказка
Конкретные исключения можно найти с помощью окна поиска на панели инструментов "Параметры исключений " или использовать поиск для фильтрации определенных пространств имен (например, System.IO).
Если в окне настроек исключений выбрано исключение, выполнение отладчика будет прерываться в том месте, где возникает это исключение, независимо от того, обрабатывается ли оно. Теперь исключение называется первым случайным исключением. Например, вот несколько сценариев:
В следующем консольном приложении C# метод Main вызывает AccessViolationException внутри
try/catchблока.static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("here"); } catch (Exception e) { Console.WriteLine("caught exception"); } Console.WriteLine("goodbye"); }Если у вас есть AccessViolationException , установленная в параметрах исключений, выполнение будет остановлено в строке
throwпри запуске этого кода в отладчике. Затем можно продолжить выполнение. Консоль должна отображать обе строки:caught exception goodbyeно он не отображает
hereстроку.Консольное приложение C# ссылается на библиотеку классов с классом с двумя методами. Один метод создает исключение и обрабатывает его, а второй метод создает то же исключение, но не обрабатывает его.
public class Class1 { public void ThrowHandledException() { try { throw new AccessViolationException(); } catch (AccessViolationException ave) { Console.WriteLine("caught exception" + ave.Message); } } public void ThrowUnhandledException() { throw new AccessViolationException(); } }Ниже приведен метод Main() консольного приложения:
static void Main(string[] args) { Class1 class1 = new Class1(); class1.ThrowHandledException(); class1.ThrowUnhandledException(); }Если у вас установлен флажок для AccessViolationException в настройках исключений, выполнение будет прерываться на строке
throwкак в ThrowHandledException(), так и в ThrowUnhandledException() при запуске этого кода в отладчике.
Чтобы восстановить настройки исключений по умолчанию, нажмите кнопку Восстановить список к настройкам по умолчанию.
Сообщите отладчику продолжить использование необработанных пользователем исключений
При отладке кода .NET или JavaScript с помощью Just My Code можно сообщить отладчику, чтобы предотвратить нарушение исключений, которые не обрабатываются в пользовательском коде, но обрабатываются в другом месте.
В окне "Параметры исключения " откройте контекстное меню, щелкнув правой кнопкой мыши метку столбца, а затем выберите "Показать столбцы дополнительных > действий". (Если вы отключили только мой код, вы не увидите эту команду.) Появится третий столбец с именем "Дополнительные действия ".
Если в этом столбце для исключения отображается "Продолжить, если необработано в пользовательском коде", отладчик продолжает выполнение, если это исключение не обрабатывается в пользовательском коде, но обрабатывается внешними средствами.
Чтобы изменить этот параметр для конкретного исключения, выберите исключение, щелкните правой кнопкой мыши, чтобы отобразить контекстное меню, и выберите "Продолжить без обработки в пользовательском коде". Вы также можете изменить параметр для всей категории исключений, таких как все исключения среды CLR).
Например, ASP.NET веб-приложения обрабатывают исключения, преобразовав их в код состояния HTTP 500 (обработка исключений в веб-API ASP.NET), что может не помочь определить источник исключения. В приведенном ниже примере код пользователя вызывает String.Format(), который выбрасывает FormatException исключение. Перерывы в выполнении следующие.
Добавление и удаление исключений
Можно добавлять и удалять исключения. Чтобы удалить тип исключения из категории, выберите исключение и нажмите кнопку "Удалить выбранное исключение " (знак минуса) на панели инструментов "Параметры исключения ". Вы также можете щелкнуть исключение правой кнопкой мыши и выбрать пункт "Удалить " в контекстном меню. Удаление исключения имеет тот же эффект, что и при том, когда исключение не отмечено, т. е. отладчик не останавливается при его возникновении.
Чтобы добавить исключение, выполните приведенные действия.
В окне "Параметры исключения" выберите одну из категорий исключений (например, Общее средство выполнения языков).
Нажмите кнопку "Добавить исключение" в выбранную категорию (знак плюса).
Введите имя исключения (например, System.UriTemplateMatchException).
Исключение добавляется в список (в алфавитном порядке) и автоматически проверяется.
Чтобы добавить исключение в исключения доступа к памяти GPU, исключения среды выполнения JavaScript или исключения Win32, включите код ошибки и описание.
Подсказка
Проверьте орфографию! Окно параметров исключений не проверяет наличие добавленного исключения. Поэтому при вводе Sytem.UriTemplateMatchException вы получите запись для этого исключения (а не для System.UriTemplateMatchException).
Параметры исключения сохраняются в suo-файле решения, поэтому они применяются к конкретному решению. Не удается повторно использовать определенные параметры исключений в решениях. Теперь сохраняются только добавленные исключения; удалённые исключения не сохраняются. Вы можете добавить исключение, закрыть и повторно открыть решение, и исключение по-прежнему будет там. Но при удалении исключения и закрытии или повторном открытии решения исключение будет вновь появиться.
Окно "Параметры исключений" поддерживает универсальные типы исключений в C# , но не в Visual Basic. Чтобы разорвать такие исключения MyNamespace.GenericException<T>, необходимо добавить исключение в качестве MyNamespace.GenericException'1. То есть, если вы создали исключение, например этот код:
public class GenericException<T> : Exception
{
public GenericException() : base("This is a generic exception.")
{
}
}
Вы можете добавить исключение в параметры исключений с помощью предыдущей процедуры:
Добавление условий в исключение
Используйте окно "Параметры исключения" , чтобы задать условия для исключений. В настоящее время поддерживаемые условия включают имена модулей, которые необходимо включать или исключать для обработки исключений. Задав имена модулей в качестве условий, можно выбрать остановку при возникновении исключения только в определенных модулях кода. Вы также можете избежать прерывания работы конкретных модулей.
Замечание
Добавление условий в исключение поддерживается начиная с Visual Studio 2017.
Добавление условных исключений:
Нажмите кнопку "Изменить условия " в окне "Параметры исключения" или щелкните исключение правой кнопкой мыши и выберите "Изменить условия".
Чтобы добавить дополнительные обязательные условия к исключению, выберите "Добавить условие " для каждого нового условия. Отображаются дополнительные строки условий.
Для каждой строки условия введите имя модуля и измените список операторов сравнения на Equals или Not Equals. Можно указать подстановочные знаки (\*) в имени, чтобы указать несколько модулей.
Если необходимо удалить условие, выберите X в конце строки условия.