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