VSX: программно отключение точек останова во время выполнения - PullRequest
2 голосов
/ 07 января 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 08 января 2010

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

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

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

0 голосов
/ 07 января 2010

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

...