VS Debug DLL вызывается из системной службы

Я разрабатываю DLL (в Visual C# Express) с некоторой логикой плагина для приложения.

Есть ли способ отладить эту DLL, когда она используется приложением? Приложение работает как служба в Windows, и это COTS-приложение, а это означает, что это не проект C#, с которого я могу начать отладку.

Я знаю, что существуют ограничения на отладку в Visual C# Express. Возможна ли эта задача в Visual Studio Pro?

Чего я хочу добиться, так это иметь возможность пройти через логику, установить точки останова, чтобы увидеть, что происходит, когда приходит вызов. Любые подсказки?


person Petter Nordlander    schedule 27.06.2012    source источник


Ответы (3)


Я не уверен насчет VS Express, но обычно

  1. Откройте визуальную студию
  2. Откройте свое решение (проект службы Windows)
  3. Отладка -> Присоединить к процессу
  4. Выберите свой сервис из списка доступных процессов
  5. Вы можете использовать точки останова и другие вещи.

Надеюсь, поможет.

person esertbas    schedule 27.06.2012
comment
Ага! Похоже на профессиональную функцию. Но это сойдет. Спасибо - person Petter Nordlander; 28.06.2012
comment
.. и проверено. Работает как шарм! - person Petter Nordlander; 29.06.2012

Хотя я не совсем уверен, как это работает конкретно со службами, вы можете установить произвольную цель отладки.

В панели отладки (в свойствах проекта) вы можете установить любой исполняемый файл или другую команду в качестве цели отладки. Процесс, созданный этой командой, будет иметь прикрепленный отладчик, независимо от того, откуда был взят исполняемый файл. Нет требований, чтобы цель была проектом C# или любым проектом Visual Studio. Это должно быть доступно как в Express, так и в Pro. Можно подключиться к более позднему процессу (если у вас есть программа запуска), но это, вероятно, выходит за рамки ваших текущих возможностей.

Затем вы устанавливаете точки останова в своем коде, как обычно, и когда код срабатывает (независимо от того, вызывает ли он ваш код или исполняемый файл хоста), точка останова будет активирована. В зависимости от того, сколько у вас информации о хосте, вы также можете эффективно отлаживать его; даже если у вас нет информации, вы сможете пройти сборку пошагово.

Единственное требование здесь состоит в том, чтобы цель загружала и запускала ваш код. В зависимости от контекста (плагин к программе, внедренная зависимость и т. д.) это может иметь разную сложность. Этот метод используется во многих местах, особенно в системах плагинов, где вы не можете отлаживать настоящий хост, но все же хотите сделать это со своим плагином.

Другой, немного более уродливый вариант, состоит в том, чтобы заставить хост сломаться и идентифицировать себя. Это полезно только для отладки, так как это очень разрушительно. Типичный метод — показать окно сообщения (модальное) с идентификатором процесса. Затем процесс будет приостановлен до тех пор, пока сообщение не будет отклонено, и можно будет подключить отладчик. С услугами это становится сложнее, хотя все еще есть способы опубликовать вашу информацию блокирующим образом.

person ssube    schedule 27.06.2012

Вы можете использовать System.Diagnostics.Debugger.Break() метод.

person dugas    schedule 27.06.2012