Я ищу способ в .NET(2.0, С# в частности) для исходного кода запускать отладочный разрыв, как если бы точка останова была установлена в этот момент, не задумываясь о том, чтобы установить конкретную точку останова в отладчик и не вмешиваясь во время выполнения.
Наш код должен проглатывать исключения в производстве, поэтому мы не нарушаем клиентское приложение, которое ссылается на нас, но я пытаюсь настроить его таким образом, чтобы такие ошибки появлялись, чтобы их анализировать, если это происходит в отладчике, и в противном случае будет безопасно проигнорировано.
Моя попытка использовать Debug.Assert(false)
была меньше идеальной, и я предполагаю, что Debug.Fail()
будет вести себя одинаково. Теоретически это не должно иметь никакого эффекта в производстве, и оно успешно останавливается при отладке, но по дизайну (насколько я могу судить) нет возможности продолжить выполнение, если вы хотите игнорировать эту ошибку, как вы могли бы с фактической точкой останова, и, как и в производстве, мы проглотим ошибку. Это также, по-видимому, нарушает оценку состояния переменной, потому что отладчик фактически останавливается в собственном системном коде, а не в нашем, поэтому его отладочная помощь ограничена. (Возможно, мне не хватает какого-то способа вернуться к вещам, чтобы посмотреть на переменные и т.д., Где это произошло.)
Я надеялся на что-то вроде Debug.Break()
, но он, похоже, не существует (если, возможно, в более поздней версии .NET?), и никакие другие методы Debug
также не применимы.
Обновление:. В то время как ответ ctacke является лучшим совпадением для того, что я искал, с тех пор я обнаружил трюк с Debug.Assert() - при запуске в отладчике - Пауза отладчик, перейдите к коду для ожидания отладки Debug.Assert(выделено зеленым цветом, потому что он отсутствует в коде фреймворка) и нажмите "Вычеркнуть" (shift-F11), а затем нажмите "Игнорировать" в диалоговом окне "Утверждение". Это приведет к тому, что отладчик остановится на возврате assert (и сможет продолжить выполнение, как если бы оно не произошло, поскольку оно было проигнорировано). Могут быть другие способы сделать то же самое (ударяет ли Retry это более прямо?), Но этот способ был интуитивным.