В инструментах / исключениях я установил параметр, при котором отладчик останавливается при возникновении исключения. Захвачено оно или нет.
Как мне исключить исключение из этого правила? Где-то в моем коде есть перехваченное исключение, которое является частью логики программы. Поэтому я, очевидно, не хочу, чтобы это исключение останавливало отладчик каждый раз при его попадании.
Пример: я хочу игнорировать исключение nullreference (которое обнаружено) в строке 344. Я хочу остановиться на всех остальных исключениях
Ответы:
Если я правильно помню, вы можете использовать
DebuggerStepThrough
атрибут метода, который содержит код, который вы не хотите, чтобы исключение запускалось. Я полагаю, вы можете изолировать код, который вызывает раздражающее исключение в методе, и украсить его атрибутом.источник
DebuggerStepThrough
Атрибут не влияет на поведение отладчика с первым шансом исключением.DebuggerStepThrough
атрибут не имеет значения для CLR. Это интерпретируется отладчиками. Похоже, что он не работает надежно при различных обстоятельствах, и онDebuggerHidden
будет работать надежно stackoverflow.com/a/3455100/141172DebuggerHidden
твой друг!Протестировано на VS2010 и отлично работает.
Хотя,
DebuggerStepThrough
похоже, также работает для некоторых конкретных версий отладчика,DebuggerHidden
похоже, работает для более широкого круга ситуаций, основанных на комментариях к обоим ответам.Обратите внимание, что оба параметра в настоящее время не работают с методами блока итератора или с методами async / await . Это может быть исправлено в более позднем обновлении Visual Studio.
источник
DebuggerHidden
...DebuggerStepThrough - это тот, который используется для предотвращения прерывания отладчиком метода, в котором есть попытка / уловка.
Но это работает только в том случае, если вы не сняли флажок «Включить только мой код (только управляемый)» в общих настройках параметров отладки Visual Studio (меню Инструменты / Параметры, узел Отладка / Общие) ...
Дополнительная информация об этом атрибуте http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
DebuggerHidden просто помешает отладчику отображать метод, в котором возникло исключение. Вместо этого он покажет первый метод в стеке, который не отмечен этим атрибутом ...
источник
Атрибуты, указанные в других ответах (и другие, такие как
DebuggerNonUserCode
атрибут), больше не работают таким же образом по умолчанию в Visual Studio 2015. Отладчик будет отключаться при исключениях в методах market с этими атрибутами, в отличие от более старых версий VS. Чтобы отключить повышение производительности, которое изменило их поведение, вам необходимо изменить параметр реестра:reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
Более подробную информацию можно найти в блоге Visual Studio .
(Вероятно, это должен быть комментарий к верхнему ответу, но у меня недостаточно репутации)
источник
Вы не можете выделить исключение, созданное в определенном месте вашего кода. Однако вы можете отключить исключения определенного типа.
Если ваш собственный код вызывает рассматриваемое исключение, я бы сделал его настраиваемым исключением, производным от всего, что подходит, а затем отключил бы прерывание отладки для этого производного типа.
Отключение системных исключений как NullReferenceException повлияет на всю систему, что, конечно, нежелательно во время разработки.
Обратите внимание, что есть два типа поведения прерывания для исключений:
Вы можете удалить отметку «Thrown» для исключения NullReferenceException, что даст вам возможность не нарушать каждый раз, когда ваша система передает соответствующую строку в вашем коде, но по-прежнему ломается, если у вас есть необработанное ожидание NullReference, возникающее в других частях система.
источник