Может ли исходный код .NET жестко закодировать точку останова отладки?

Я ищу способ в .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 это более прямым?), Но этот способ был интуитивно понятным.

66 голосов | спросил Rob Parker 12 FriEurope/Moscow2008-12-12T02:55:00+03:00Europe/Moscow12bEurope/MoscowFri, 12 Dec 2008 02:55:00 +0300 2008, 02:55:00

0 ответов


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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132