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