Я бы хотел, чтобы Visual Studio прерывался, когда происходит обработанное исключение (т.е. я не просто хочу видеть сообщение «Первый шанс», я хочу отладить фактическое исключение).
например Я хочу, чтобы отладчик сломался при исключении:
try
{
System.IO.File.Delete(someFilename);
}
catch (Exception)
{
//we really don't care at runtime if the file couldn't be deleted
}
Я наткнулся на заметки эти для Visual Studio.NET:
1) In VS.NET go to the Debug Menu >> "Exceptions..." >> "Common Language Runtime Exceptions" >> "System" and select "System.NullReferenceException"
2) In the bottom of that dialog there is a "When the exception is thrown:" group box, select "Break into the debugger"
3) Run your scenario. When the exception is thrown, the debugger will stop and notify you with a dialog that says something like: "An exception of type "System.NullReferenceException" has been thrown. [Break] [Continue]"
Hit [Break]. This will put you on the line of code that's causing the problem.
Но они не применимы к Visual Studio 2005 (в меню Отлаживать нет опции Исключения).
Кто-нибудь знает, где найти этот диалог опций в Visual Studio, что в групповом поле «Когда выбрасывается исключение» с опцией «Взломать отладчик»?
Обновление: проблема заключалась в том, что в моем меню Отлаживать не было элемента Исключения. Я настроил меню, чтобы добавить его вручную.
Мне потребовалось время, чтобы найти, как восстановить настройки исключения дефолт после того, как я изменил некоторые настройки исключения, поэтому новый ответ. восстановить настройки исключения по умолчанию





В VS2005 есть окно «исключения» ... попробуйте Ctrl + Alt + E при отладке и установите флажок «Выброшено» для исключения, на котором вы хотите остановиться.
Это именно то, что я хочу. Где это в меню? За всю жизнь я не могу этого найти.
Сочетание клавиш может меняться в зависимости от профиля (разработчик C#, разработчик C++ и т. д.)
У меня есть пункт меню: Отладка -> Исключения. Это с VS2005 Professional. Вы используете Экспресс-версию?
если вам нужен пункт меню Исключения: Выберите Инструменты | Настроить .... Щелкните вкладку Команды. Выберите категорию «Отладка» в поле «Категории». Найдите пункт команды «Исключения ...», затем перетащите его в меню «Отладка» в верхней части приложения, поместив его в соответствующее место в меню. (найдено в комментариях к: blogs.vertigo.com/personal/keithc/Blog/archive/2007/07/20/…)
Открыв решение, перейдите в пункт меню «Отладка - Исключения» (Ctrl + D, E). Оттуда вы можете выбрать прерывание по исключениям Брошенный или Необработанный пользователем.
Обновлено: Мой экземпляр настроен с помощью «профиля» C#, возможно, его нет для других профилей?
у меня просто нет такой возможности. Это объяснило бы мое замешательство.
Вам вообще не хватает меню отладки?
у меня было меню отладки, но не было опций исключений. я настроил меню, чтобы добавить его вручную; горячая клавиша работала в любом случае (Ctrl + Alt + E)
Кроме того, вы можете сбросить среду VS2010, перейдя в «Инструменты», «Импорт параметров экспорта» и выбрав сброс в среду C# ... она содержит элемент подменю «Исключения».
Для включения пункта меню Исключение см. Как: прервать работу при возникновении исключения (MSDN), раздел «Чтобы добавить команду« Исключения »в меню« Отладка »» (это может быть включено в ответ).
@AustinSalonen Разве OP не спрашивает, как сломать исключения обработанный?
@ Мэтт, это то, что делает Перерыв на бросок.
Я выбрал Common Language Runtime Exceptions> <All Common Language Runtime Exceptions not in this list> в Visual Studio 2017, и все мои самые смелые мечты сбылись.
Visual Studio 2015: Отладка -> Windows -> Параметры исключений
@AaronNewton Может быть, ответим на ваш комментарий. Есть ответы, в которых предлагается проверить «Все исключения не в этом списке», но они не указывают конкретно на Common Language Runtime Exceptions> <All Common Language Runtime Exceptions not in this list>.
А как насчет настраиваемых, определяемых пользователем исключений, которые не являются исключениями CLR?
Проверьте страницу Управление исключениями с помощью отладчика, на ней объясняется, как это настроить.
По сути, вот шаги (во время отладки):
В меню «Отладка» выберите «Исключения».
В диалоговом окне «Исключения» выберите «Выброшено» для всей категории исключений, например «Исключения среды CLR».
-или же-
Разверните узел для категории исключений, например «Исключения среды CLR», и выберите «Выброшено» для определенного исключения в этой категории.
Я использую следующую технику. Определите глобальную переменную, которую вы можете использовать для одного или нескольких блоков try catch в зависимости от того, что вы пытаетесь отлаживать, и используйте следующую структуру:
if (!GlobalTestingBool)
{
try
{
SomeErrorProneMethod();
}
catch (...)
{
// ... Error handling ...
}
}
else
{
SomeErrorProneMethod();
}
Я считаю, что это дает мне немного больше гибкости с точки зрения тестирования, потому что все еще есть некоторые исключения, которые я не хочу, чтобы IDE ломалась.
Это полезный метод - он превращает обработанное исключение в необработанное исключение, поэтому отладчик автоматически останавливается на нем. Я не уверен, почему он был отклонен, если только не потому, что нет хорошего способа установить GlobalTestingBool. Другой, возможно, лучший вариант - использовать Debugger.IsAttached.
Вам придется добавлять это при каждой попытке / улове и перекомпилировать код. Не очень полезно, если вы уже что-то отлаживаете.
Исключение должно быть создано в коде, если есть исключительное условие - что-то неприемлемое - и оно должно быть обнаружено на уровне, на котором можно принять решение о том, как с ним справиться. Такой код чрезмерно усложняет выполнение.
Я знаю, что это действительно старый ответ, но для случайных гуглеров, таких как я, вы можете просто добавить catch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
Онлайн-документация кажется немного неясной, поэтому я просто провел небольшой тест. Выбор прерывания при возникновении из диалогового окна «Исключения» приводит к прерыванию выполнения программы из-за исключения Любые, обработанного или необработанного. Если вы хотите прервать выполнение только обработанных исключений, похоже, ваш единственный выход - просмотреть код и установить точки останова на все обрабатываемые исключения. Это кажется немного чрезмерным, поэтому может быть лучше добавить оператор отладки всякий раз, когда вы обрабатываете исключение. Затем, когда вы увидите этот вывод, вы можете установить точку останова в этой строке кода.
Мне потребовалось время, чтобы найти новое место для настроек ожидания, поэтому новый ответ.
Начиная с Visual Studio 2015 вы определяете, какие исключения следует останавливать в окне настроек исключений (Отладка-> Windows-> Настройки исключений). Ярлык по-прежнему Ctrl-Alt-E.
Самый простой способ обработки настраиваемых исключений - выбрать «все исключения не в этом списке».
Вот скриншот из английской версии:
Вот скриншот из немецкой версии:
В VS2015 это было в разделе Debug-> Windows-> Exception Settings.