Название может быть немного запутанным, поэтому я объясню.Скажем, у вас была эта цепочка вызовов ...
public DoWork(index) >> private DoWorkHelper(index) >> private CheckIndex(index)
Теперь, если вы звоните DoWork
, она переходит к вызовам до CheckIndex
, добавляя каждый более глубокий вызов в стек вызовов.
Теперь, если кто-то вызывает DoWork
с неправильным значением для index
, он полностью исключает исключение на CheckIndex
, и в настоящее время именно здесь происходит сбой отладчика.Затем вам нужно вернуться обратно к стеку вызовов, чтобы увидеть, что настоящий нарушитель в том, что кто-то передал неверные данные на DoWork
.
Теперь, во времена VB6, вы могли просто украсить DoWorkHelper
и CheckIndex
с атрибутом, говорящим: «Если во мне возникнет какое-либо исключение, не выделяй меня, а скорее моего абонента, потому что именно они передали мне плохую чушь!»Таким образом, в этом случае код будет прерываться внутри DoWork
с выделенным вызовом DoWorkHeper
.
Была также настройка, позволяющая отключить эту функцию, чтобы в более глубоких целях отладки ее можно было выбросить на CheckIndex
, уровне, на котором она фактически произошла, но половину времени разрушение там ничего не говорит вам, потому что вы нене знаю, как вы туда попали, не поднимаясь обратно вверх по стеку вызовов.
Подумайте о том, как украсить свой код, чтобы сказать, что когда вы нажмете исключение, автоматически пройдитесь по стеку вызовов до точки, где плохойЗначение на самом деле говорит вам кое-что полезное.
Обратите внимание, что это похоже на 'Break On All Exceptions', за исключением того, что вы обрабатываете это с помощью украшения.Кроме того, вы не устанавливаете ограничение на конкретный тип исключения (например, все исключения с нулевой ссылкой и т. Д.), А скорее на конкретный метод!(или, точнее, тот, который вызвал декорированный метод.)
Так есть ли в C # или .NET вообще?
Обновление
Пока я кредитТемный Сокол за ответ, так как он направил меня туда, я добавил более подробное объяснение того, что означают все атрибуты и в каком контексте.Проверьте это ниже.