DebuggerHidden
очень удобно для маркировки вспомогательных методов, убедившись, необработанное исключение остановки отладчика в удобном месте:Как объединить DebuggerHidden с методами блока итератора?
К сожалению, это не похоже на работу с блоки итераторов:
(если бы это было так, отладчик покажет in
в качестве текущего оператора во втором примере).
Хотя это, очевидно, ограничение Visual Studio (для которого у меня есть submitted a report), есть ли способ, которым я мог бы обойти эту проблему, продолжая использовать блок итератора?
Я предполагаю, что это происходит потому, что код сгенерированного компилятором для реализации итератора не помечен [DebuggerHidden]
. Возможно, есть какой-то способ убедить компилятор сделать это?
Я не очень понимаю ваше дизайнерское решение скрывающихся исключений таким образом. Я вижу две ситуации, которые могут произойти: 1) Вы пишете библиотеку, которая будет использоваться другими разработчиками. В этом случае у них нет источников, а в VS наименьший уровень видимого стека будет ThrowIterator. Так вы и хотели в первую очередь. 2) Этот код используется только вашей командой, внутри, для вашего проекта. В этом случае, почему вы позволили бы неперехватываемое исключение, подобное этому, и не обрабатывали его? В случае его броска, даже при отладке, вы действительно хотите видеть, что он находится внутри ThrowIterator, и большинство imp –
Несомненно, не имеет значения, почему я использую эту функцию. Он есть, и я просто хочу посмотреть, как заставить его работать при любых обстоятельствах. –
Но если вам интересно, рассмотрите метод 'PerformQuery', который выдает, если аргументы не имеют смысла. Он используется только нашей командой.Исключением является неотображение, потому что это отладочная сборка, которая * специально избегает * улавливания исключений * просто *, так что Visual Studio останавливается в нужном месте. Если проект просто закрыт с общим сообщением «было проблемой», разве это не сделало бы отладку излишне сложнее? Мы знаем, что есть ошибка, возможно, остановка точно на правильной линии! –