VSX: программно отключение точек останова во время выполнения

2

Как включить или отключить точки останова во время выполнения? Я пишу тестовое приложение Workbench, которое может запускать другой .net-код для отладки плагинов. Сам приложение workbench не отлаживается (DebuggableNonUserCodeAttribute), но код пользователя, который он вызывает, должен быть. Но тогда, при определенных обстоятельствах во время выполнения, контрольные точки пользовательского кода не должны выполняться.

Я могу представить себе различные способы достижения этого, многие из них могут быть невозможны:

1) Привязать и отделить отладчик программно
2) Включить и отключить все точки останова программным способом (желательно локализовать на сборку или класс)
3) Динамически украшать и декомпорировать методы с помощью DebuggableNonUserCodeAttribute во время выполнения.
4) Как-то пометить целую ветвь кода потока за выбранным стековым фреймом как "не прерываемую" для отладчика. DebuggableNonUserCodeAttribute работает только в рамках метода или класса, но не влияет на отлаживаемость исходного кода.

РЕДАКТИРОВАТЬ: Чтобы уточнить: во время выполнения один и тот же фрагмент кода конечного пользователя будет выполняться несколько раз исполняющим файлом хостинга, в некоторых случаях, когда контрольные точки должны выполняться, а в других случаях их не должно быть. Было бы нецелесообразно требовать, чтобы пользователь изменял свой код для этой функции или требовал установки условных точек останова.

Теги:
debugging
visual-studio-2008
vsx

2 ответа

2
Лучший ответ

Вы можете сделать как # 1, так и # 2 через часть отладчика объектной модели автоматизации DTE.

Как включить/отключить точки останова через DTE

Как подключить отладчик через DTE

0

Вы можете использовать System.Diagnostics.Debugger.Break() вместо установки контрольных точек. Просто поставьте вызов метода внутри, если бы блоки были необходимы.

  • 0
    Спасибо, но это не сработает в этой ситуации. Было бы неуместно использовать эту команду в коде пользователя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню