Visual Studio: как разбить обработанные исключения? - PullRequest
148 голосов
/ 22 сентября 2008

Я бы хотел, чтобы 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) В VS.NET зайдите в Меню отладки >> "Исключения ..." >> "Общий язык Исключения времени выполнения »>>« Система »и выберите «System.NullReferenceException»

2) В нижней части этого диалога это «Когда выдается исключение:» В групповом поле выберите «Взломать отладчик "

3) Запустите ваш сценарий. Когда исключение, отладчик будет остановиться и уведомить вас с помощью диалогового окна, которое говорит что-то вроде: «Исключение типа« System.NullReferenceException »имеет был брошен. [Перерыв] [Продолжить] "

Хит [Перерыв]. Это поставит вас на строка кода, которая вызывает проблема.

Но они не применяются к Visual Studio 2005 (в меню Отладка нет опции Исключения ).

Кто-нибудь знает, где в диалоговом окне «Найти эти параметры» в Visual Studio находится групповое поле « Когда генерируется исключение » с параметром « Взлом в отладчике »?

Обновление: проблема заключалась в том, что в моем меню Debug не было элемента Exceptions . Я настроил меню, чтобы добавить его вручную.

Ответы [ 7 ]

157 голосов
/ 22 сентября 2008

Открыв решение, перейдите к пункту меню «Отладка - исключения» ( Ctrl + D , E ). Оттуда вы можете разбить выброшенные или необработанные пользователем исключения.

РЕДАКТИРОВАТЬ: мой экземпляр настроен с "профилем" C #, возможно, его нет для других профилей?

37 голосов
/ 22 сентября 2008

В VS2005 есть окно «исключений» ... попробуйте Ctrl + Alt + E при отладке и установите флажок "Брошено" для исключение, на котором вы хотите остановиться.

16 голосов
/ 22 августа 2017

Мне потребовалось некоторое время, чтобы найти новое место для настроек ожидания, поэтому новый ответ.

Начиная с Visual Studio 2015 , вы управляете тем, какие исключения следует включить в окне настроек исключений (Debug-> Windows-> Exception Settings). Ярлык по-прежнему Ctrl - Alt - E .

Самым простым способом обработки пользовательских исключений является выбор «всех исключений, отсутствующих в этом списке».

Вот скриншот с английской версии:

enter image description here

Вот скриншот с немецкой версии:

enter image description here

10 голосов
/ 06 декабря 2017

Начиная с Visual Studio 2015 и далее, вам нужно перейти в диалоговое окно «Настройки исключений» ( Ctrl + Alt + E ) и отметить «Общеязыковые исключения времени выполнения» (или конкретное, которое вы хотите, например, ArgumentNullException), чтобы разбить его на обработанные исключения.

Шаг 1 Step 1 Шаг 2 Step 2

7 голосов
/ 22 сентября 2008

Проверка Управление исключениями на странице отладчика , объясняет, как это настроить.

По сути, вот шаги (во время отладки):

  1. В меню «Отладка» выберите «Исключения».

  2. В диалоговом окне «Исключения» выберите «Брошенный» для всей категории исключений, например, «Исключения времени выполнения на общем языке».

    -или-

    Разверните узел для категории исключений, например Общих исключений времени исполнения, и выберите Брошенный для конкретного исключения в этой категории.

1 голос
/ 12 января 2009

Техника, которую я использую, похожа на следующую. Определите глобальную переменную, которую вы можете использовать для одного или нескольких блоков try catch, в зависимости от того, что вы пытаетесь отлаживать, и используйте следующую структуру:

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

Я считаю, что это дает мне больше гибкости в плане тестирования, потому что есть некоторые исключения, которые я не хочу, чтобы среда IDE работала.

0 голосов
/ 23 июня 2016

Онлайн-документация кажется немного неясной, поэтому я просто провел небольшой тест. Выбор прерывания на Thrown в диалоговом окне Исключения приводит к прерыванию выполнения программы на любом исключении, обработанном или необработанном. Если вы хотите разбить только обработанные исключения, кажется, что единственным выходом для вас является прохождение кода и установка точек останова на все обработанные исключения. Это кажется немного чрезмерным, поэтому может быть лучше добавить оператор отладки всякий раз, когда вы обрабатываете исключение. Затем, когда вы видите этот вывод, вы можете установить точку останова на этой строке в коде.

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