Как предотвратить прерывание конкретного исключения, если оно обрабатывается

58
7

Обычно я хочу, чтобы отладчик разбился на ArgumentOutOfRangeException.

Но в моем try catch(ArgumentOutOfRangeException) это исключение уже обработано и поэтому я хочу, чтобы отладчик не прерывался.

Я попробовал атрибут DebuggerStepThrough, но он все еще ломается.

спросил(а) 2013-11-01T12:40:00+04:00 6 лет, 11 месяцев назад
1
Решение
97

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

Перейдите в раздел "Отладка" → "Исключения", "Исключения общего времени выполнения", отметьте галочкой (снимите флажок "Брошенный"). Конечно, вы можете получить очень точное с тем, что хотите разбить, свернув в этот список. Имейте в виду, что этот параметр вступает в силу во всем решении, вы не можете установить его для каждого класса или метода. Если вы хотите быть более избирательным для каждого метода, тогда подумайте о том, чтобы использовать директивы компиляции, чтобы не включать этот бит кода во время отладки.

Что касается атрибута DebuggerStepThrough, то есть для предотвращения взлома точек останова, это не связано с нарушением исключений.

ответил(а) 2013-11-01T12:47:00+04:00 6 лет, 11 месяцев назад
57

Есть выход. Сначала отключите отладочный код, который не является вашим. Откройте "Инструменты"> "Параметры"> "Отладка"> "Общие"> выберите "Включить только мой код (только управляемый)". Теперь сообщите отладчику, что эта одна функция не является частью вашего кода с помощью DebuggerNonUserCodeAttribute:

    [System.Diagnostics.DebuggerNonUserCode()]
private void FunctionThatCatchesThrownException()
{
try
{
throw new ArgumentOutOfRangeException();
}
catch (ArgumentOutOfRangeException ex)
{
//...
}
}

Если исключение (отличное от ArgumentOutOfRangeException) выходит из функции отладчика, оно будет восприниматься как обычно, но место перехвата будет там, где вызывается функция.

ответил(а) 2013-11-01T13:33:00+04:00 6 лет, 11 месяцев назад
58

Вы должны проверить, что ваша визуальная студия не настроена на разрыв всех исключений

On the Debug menu, click Exceptions.

In the Exceptions dialog box, select Thrown for an entire category of exceptions,
for example, Common Language Runtime Exceptions.

Справка Microsoft Visual Studio

ответил(а) 2013-11-01T12:45:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема