Как можно включить или отключить контрольные точки во время выполнения? Я пишу тестовое приложение рабочей среды, которое может запускать другой код .net для целей отладки плагинов. Само приложение рабочей среды не является отлаживаемым (DebuggableNonUserCodeAttribute), но пользовательский код, который он вызывает, должен быть. Но тогда, при определенных обстоятельствах во время выполнения, точки останова пользовательского кода не должны соблюдаться.
Я могу представить различные способы достижения этого, многие из них могут оказаться невозможными:
1) Подключите и отсоедините отладчик программно
2) Включение и отключение всех точек останова программным способом (желательно локализованным для сборки или класса)
3) Динамически декорировать и декорировать методы с помощью атрибута DebuggableNonUserCodeAttribute во время выполнения.
4) Каким-то образом пометить всю ветвь кода потока за пределами выбранного стекового фрейма как «не подлежащую прерыванию» для отладчика. Кажется, что DebuggableNonUserCodeAttribute работает только внутри метода или класса, но не влияет на возможность отладки нижестоящего кода.
РЕДАКТИРОВАТЬ: Чтобы уточнить: во время выполнения один и тот же фрагмент кода конечного пользователя будет запускаться исполняемым файлом хоста несколько раз, в некоторых случаях точки останова должны соблюдаться, а в других случаях - нет. Было бы неуместно требовать, чтобы пользователь изменил свой код для этой функции или чтобы он устанавливал условные контрольные точки.