Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отладка Служб, Как? 
:(
    Опции темы
WinNet
Дата 22.3.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 4.3.2007
Где: г.Москва

Репутация: нет
Всего: нет



Подскажите пожалуйста , как отлаживать службы в MS Visual Studio ?

PM ICQ   Вверх
ivashkanet
Дата 22.3.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



У каждого сервиса есть хост-файл который этот сервис запускает.
Чаще всего это svhost.exe который находится в папке windows\system32\
К нему можно подключиться и отлаживать свой сервис на здоровье ;-)

P.S. Где-то я видел аддон к Менеджеру Задач (Task Manager), который показывает к какому exe-шнику хостится служба ;-)
PM MAIL WWW ICQ   Вверх
Дрон
Дата 22.3.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



ivashkanet, это ты что-то путаешь. Служба в Windows имеет свой собственный процесс, к которому и надо присоединять отладчик.


WinNet, примерно так:
1. компилириуешь сервис в debug режиме
2. устанавливаешь его и запускаешь как сервис
3. в меню Visual Studio выбираешь: Debug -> Attach to Process... (или Debug -> Processes... в 2003-й студии) и находишь свой сервис

А дальше всё зависит от того, что тебе нужно.


Это сообщение отредактировал(а) Дрон - 22.3.2007, 19:31


--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 22.3.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Дрон @  22.3.2007,  18:31 Найти цитируемый пост)
vashkanet, это ты что-то путаешь

Укажи, пожалуйста, где именно
Цитата(Дрон @  22.3.2007,  18:31 Найти цитируемый пост)
Служба в Windows имеет свой собственный процесс

Дрон, свой собственный, или они могут делить один процесс на двоих, троих, ....?


Можно даже без аддона:
Правой на Мой компьютер -- Управление (Managent) -- Сервисы и приложения (Services and Applications) -- Сервисы (Services)
Появится список сервисов, нажав на каждый из которых можно увидеть строку его запуска

Поехали:
.NET Runtime Optimization Service v2.0.50727_X86 --- C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe
ACU Configuration Service --- C:\WINDOWS\system32\acs.exe
Alerter -- C:\WINDOWS\system32\svchost.exe -k LocalService
Application Layer Gateway Service --- C:\WINDOWS\System32\alg.exe
Application Management --- C:\WINDOWS\system32\svchost.exe -k netsvcs
ASP.NET State Service --- C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_state.exe
Ati HotKey Poller --- C:\WINDOWS\system32\Ati2evxx.exe
Automatic Updates --- C:\WINDOWS\system32\svchost.exe -k netsvcs
Background Intelligent Transfer Service --- C:\WINDOWS\system32\svchost.exe -k netsvcs
Bluetooth Service --- C:\Program Files\ThinkPad\Bluetooth Software\bin\btwdins.exe
........................

Продолжать?

Как мы видим служба либо имеет свой запускной файл, либо запускается с C:\WINDOWS\system32\svchost.exe

Так в чем же я ошибся, а?
Цитата(Дрон @  22.3.2007,  18:31 Найти цитируемый пост)
Служба в Windows имеет свой собственный процесс

Процесс будет именно тот, который запускает нашу службу

Это сообщение отредактировал(а) ivashkanet - 22.3.2007, 20:10
PM MAIL WWW ICQ   Вверх
WinNet
Дата 22.3.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 4.3.2007
Где: г.Москва

Репутация: нет
Всего: нет



Цитата

2. устанавливаешь его и запускаешь как сервис
3. в меню Visual Studio выбираешь: Debug -> Attach to Process... (или Debug -> Processes... в 2003-й студии) и находишь свой сервис


Не могу запустить сервис так как он тут же останавливается после запуска , наверное по причине какой то ошибки.
Для нахождения этой ошибки я хочу выполнить отладку... при отладке (F11)  smile система просит установить службу. Может есть какие то директивы?
Или я чего то не понял?

PM ICQ   Вверх
Дрон
Дата 22.3.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Цитата(ivashkanet @  22.3.2007,  20:07 Найти цитируемый пост)
Как мы видим служба либо имеет свой запускной файл, либо запускается с C:\WINDOWS\system32\svchost.exe

Хмм... Да. Похоже всё-таки ты прав, просто мне не приходилось сталкиваться со вторым типом.

Цитата(WinNet @  22.3.2007,  21:23 Найти цитируемый пост)
Не могу запустить сервис так как он тут же останавливается после запуска , наверное по причине какой то ошибки.

Это хуже, тогда так "в лоб" отладить не получится.

Как вариант -- вставить в службу обработчики исключений и пусть она пишет в лог о своих ошибках, да и вообще о каждом действии.
Кстати, можно сразу попробовать посмотреть в логи через Администрирование -> Просмотр событий. Вдруг там что-то будет.



--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 22.3.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(WinNet @  22.3.2007,  20:23 Найти цитируемый пост)
Не могу запустить сервис так как он тут же останавливается после запуска , наверное по причине какой то ошибки.

А что если сразу после запуска ввести службу в вечный цикл:
Код

int i = 0

while( i == 0)
{
Thread.Sleep(100);
}

Поставить брэйкпоинт на Sleep, спокойно подключиться, а потом в дебаге изменит значение i 

Как считаете?

Либо еще какой нить вариант с бесконечным циклом (или циклом, чтоб только-только подключиться) и внешним "раздражителем", который этот цикл прервет

Это сообщение отредактировал(а) ivashkanet - 22.3.2007, 21:39
PM MAIL WWW ICQ   Вверх
arilou
Дата 27.3.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(ivashkanet @  22.3.2007,  21:38 Найти цитируемый пост)
А что если сразу после запуска ввести службу в вечный цикл:

Можно MessageBox вывести в самом начале и приаттачиться к сервису, пока ентот MessageBox будет на экране. Только выводить его надо через WinApi, т.к. дотнетовские сервисы доступа к десктопу не имеют.


Цитата(Дрон @  22.3.2007,  21:29 Найти цитируемый пост)
Хмм... Да. Похоже всё-таки ты прав, просто мне не приходилось сталкиваться со вторым типом.

Просто сервисы можно делать и как DLL. Тогда они хостятся svchost'ом. Нафиг оно надо только, непонятно  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
1stain
Дата 23.11.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



совершеннол случайно набрел на этот топик

вариант без геммороя:
в OnStart или прямо в main
пишем
System.Diagnostics.Debugger.Launch();
и ставим брякпоинт. Только надо сильно не задерживаться в теле OnStart



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1159 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.