Не останавливайте отладчик при ТОМ исключении, когда это будет брошено и поймано

 [DebuggerStepThrough]

( документы )

91
задан MichaelD 14 September 2009 в 08:58
поделиться

3 ответа

If I recall correctly you can use a DebuggerStepThrough attribute on the method that contains the code you don't want exception to fire. I suppose you can isolate the code that fires the annoying exception in a method and decorate it with the attribute.

40
ответ дан 24 November 2019 в 06:50
поделиться

Вы не можете выделить исключение, созданное в определенном месте вашего кода. Однако вы можете отключить исключения определенного типа.

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

] Отключение системных исключений как NullReferenceException повлияет на всю систему, что, конечно, нежелательно во время разработки.

Обратите внимание, что есть два типа поведения прерывания для исключений:

  • Выброшено: если выбрано, прерывается, как только исключение этого типа выбрасывается
  • User-unhandled: если выбрано, прерывается, только если исключение этого типа не обрабатывается с помощью try / catch.

Вы можете удалить проверку в 'Thrown'

3
ответ дан 24 November 2019 в 06:50
поделиться

DebuggerHidden - ваш друг!

Среда CLR не придает семантике этому атрибуту. Он предназначен для использования отладчиками исходного кода. Например, отладчик Visual Studio 2005 не останавливается на методе, отмеченном этим атрибутом, и не позволяет устанавливать точку останова в методе. Другими атрибутами отладчика, распознаваемыми отладчиком Visual Studio 2005, являются DebuggerNonUserCodeAttribute и DebuggerStepThroughAttribute.

Протестировано на VS2010, отлично работает.

Хотя DebuggerStepThrough , похоже, также работает для некоторых конкретных версий отладчика, DebuggerHidden , судя по комментариям к обоим ответам, работает для более широкого круга ситуаций.

Обратите внимание, что обе опции в настоящее время не работают с методами блока итератора или с методами async / await . Это может быть исправлено в более позднем обновлении Visual Studio.

64
ответ дан 24 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: