Как отлаживать без пользовательского интерактивного режима (например, службы) - PullRequest
0 голосов
/ 29 марта 2019

Можно ли имитировать не-пользовательский интерактивный режим при отладке в Visual Studio, и если да, то как?

У меня запущена служба, которую я хотел бы отладить, но поведение отличается в зависимости от того, отлаживаю ли я ее или запускаю службу.

Я нашел этот вопрос:

Как отлаживать службы Windows в Visual Studio?

Ответ там не совсем для меня, потому что после этого, когда вы отлаживаете, отладчик запускает процесс в режиме UserInteractive. Мне нужен отладчик для отладки процесса, но без режима UserInteractive.

Например, у меня была ошибка, которая была глубоко скрыта в коде, потому что библиотека, которую она использует, пыталась отобразить какое-то диалоговое окно (даже если диалоговое окно не было видно пользователю). Это не может быть обнаружено в Debug, потому что используется режим UserInteractive. Я хочу иметь возможность делать больше отладки по этим видам проблем

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Для отладки службы вам необходимо

  1. Построить службу в конфигурации отладки

  2. Установить службу, чтобы узнать, как это сделать.перейдите по этой ссылке https://docs.microsoft.com/en-us/dotnet/framework/windows-services/how-to-install-and-uninstall-services

  3. Запустите службу либо из диспетчера управления службами, из проводника сервера или даже из кода, и если вы хотите узнать, как это сделать, перейдите по этой ссылке https://docs.microsoft.com/en-us/dotnet/framework/windows-services/how-to-start-services

  4. Запустите Visual Studio от имени администратора, чтобы можно было подключаться к системным процессам.

  5. Необязательно> в строке меню Visual Studio выберите «Инструменты», «Параметры».В диалоговом окне параметров выберите символы отладки и установите флажок Серверы символов Microsoft, а затем нажмите кнопку ОК

  6. . В строке меню выберите присоединить к процессу из меню отладки или инструментов длякороткое нажатие клавиш CTRL + ALT + P

Появляется диалоговое окно процесса

Затем установите флажок Показать процесс из всех пользователей

В разделе доступных процессов выберите процесс для вашей службы, а затем выберите присоединить

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

0 голосов
/ 11 апреля 2019

Я ненавижу присоединяться к процессу из Visual Studio.Это работает, но, кажется, также потребуется вечность, чтобы составить список процессов на выбор.Возможно, это потому, что наши системы заблокированы слишком плотно.Вполне возможно, что в другой среде это работает просто отлично.

Тем не менее, я считаю, что гораздо проще просто вызвать программную точку останова при запуске службы и перейти к отладке в начале.Чтобы сделать это, позвоните в OnStart() callback:

System.Diagnostics.Debugger.Break();

Когда вы запустите службу, вы должны получить приглашение, указывающее, что произошло необработанное исключение.

enter image description here

Выберите параметр «Да», ответьте «Да» на приглашение UAC, выберите, какой экземпляр Visual Studio вы хотите использовать, и затем выполните обычную отладку при запуске Visual Studio.

Когда вы закончите отладку, просто остановите службу, и отладчик автоматически закроется.Однако не закрывайте этот экземпляр Visual Studio.Внесите все необходимые изменения для создания службы и перестройте ее.Затем, когда вы перезапустите службу и вы дойдете до того, чтобы выбрать экземпляр Visual Studio для использования, он включит ваш исходный экземпляр отладки в список.Гораздо быстрее вернуться к этому, чем каждый раз создавать новый экземпляр.

HTH

...