Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Исключение — это указание состояния ошибки, возникающего во время выполнения программы. Вы можете указать отладчику, на каких исключениях или наборах исключений следует остановиться, и в какой момент следует это сделать (то есть приостановить выполнение программы в отладчике). При остановке отладчика отображается, где было вызвано исключение. Кроме того, можно добавлять или удалять исключения. При открытом решении в 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 в конце строки условия.