Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.17;
Скачать: CL | DM;

Вниз

Как пользоваться программой DebugView   Найти похожие ветки 

 
Kolan ©   (2009-11-17 14:09) [0]

Здравствуйте!

Мне нужно отладить службу. Как я понял для этого удобно использовать программу DebugView и функцию OutputDebugString.

Но как пользоваться DebugView — не могу понять. Я её подключил, но сообщения не ловятся.

Сделал тестовую программу.


procedure TForm3.FormCreate(Sender: TObject);
begin
 OutputDebugString("!!!String!!!");
end;


Дельфовый Эвент лог сообщение ловит, а DebugView — нет

---
Страница программы
http://technet.microsoft.com/ru-ru/sysinternals/bb896647%28en-us%29.aspx


 
Сергей М. ©   (2009-11-17 14:14) [1]


> нужно отладить службу


Локальную ?
Так а чем встроенный отладчик не угодил ?


 
Kolan ©   (2009-11-17 14:16) [2]

А как им цепляться — не пойму. Я на плей нажимаю, что-то запускается, но точки не срабатывают.


 
Сергей М. ©   (2009-11-17 14:18) [3]

Так ты справку-то почитай..
Там же раздел на эту тему имеется  - "Debugging service applications"..


 
Ухарь   (2009-11-17 14:43) [4]

Attach To Process


 
Ухарь   (2009-11-17 14:43) [5]

Attach To Process


 
Kolan ©   (2009-11-17 14:55) [6]

Благодарю, Сергей, почитал. Только одного не могу понять, Attach To Process показывает CPU окно, как теперь на год перейти?

Я знаю, что идиот...


 
Kolan ©   (2009-11-17 15:05) [7]

* на код


 
Piter ©   (2009-11-17 15:24) [8]

Любой сервис можно запустить как обычный EXE - и отлаживай на здоровье, в чем проблема? Или есть сильные особенности его функционирования как сервиса?

Что касается изначальной проблемы:

Kolan ©   (17.11.09 14:09)
Дельфовый Эвент лог сообщение ловит, а DebugView — нет


естественно, у приложения может быть только один отладчик. Если ты запускаешь приложение из под среды Delphi - то она и указывает себя в качестве отладчика, к таким процессам DV не цепляется. Он цепляется к тем, у которых нет отладчика, то есть DV будет работать, если ты запустишь приложение не из под дельфи, а "обычным образом".

DV при этом должен быть запущен с правами администратора.


 
Kolan ©   (2009-11-17 15:32) [9]


> Любой сервис можно запустить как обычный EXE - и отлаживай
> на здоровье, в чем проблема?


Проблема в том, что я не врублюсь как это сделать.
Нажимаю F9. Оно компилится и тут же вырубается. Точки никакие не срабатывают. Хотя ServiceExecute такой:

procedure TminiCalibratorStartService.ServiceExecute(Sender: TService);
begin
 while Status = csRunning do
 begin
   ReportStatus;
   ServiceThread.ProcessRequests(False);
   Sleep(100);
 end;
end;


 
Сергей М. ©   (2009-11-17 16:03) [10]


> Kolan ©   (17.11.09 15:32) [9]


+ к рекомендации в справке:

поставь вызов sleep(достаточное_время) в отлаживаемый обработчик

достаточное_время - время, достаточное для того чтобы ты успел запустить сервис из меню "Службы", перейти в делфи и приаттачиться к стартовавшему процессу

Точку останова ставь после слипа


 
Kolan ©   (2009-11-17 16:16) [11]

А, а потом из CPU — View source. Получилось, попал в ServiceExecute.

Мне сервис нужен-то для чего. Мне нужно ловить факт подкл. железки и запускать  нужную программу. Для определения подключения я ловлю событие WM_DEVICECHANGE

procedure TminiCalibratorStartService.WMDEVICECHANGE(var Msg: TWMDeviceChange);
var
...
begin

end;


Нэ ловица. Почему?


 
Rouse_ ©   (2009-11-17 18:13) [12]


> Для определения подключения я ловлю событие WM_DEVICECHANGE

Это не верно, для сервиса нужно подписаться либо на уведомление SERVICE_CONTROL_DEVICEEVENT при помощи RegisterDeviceNotification, либо на SERVICE_CONTROL_HARDWAREPROFILECHANGE добавив флаг SERVICE_ACCEPT_HARDWAREPROFILECHANGE в параметр dwControlsAccepted при вызове функции SetServiceStatus, ну и отлавливать уже сами уведомления в ServiceCtrlHandler


 
Rouse_ ©   (2009-11-17 18:14) [13]

А по поводу:

> Дельфовый Эвент лог сообщение ловит, а DebugView — нет

Ловить должен кто-то один. Если ты работаешь под отладчиком - отладчик и будет получать сообщения. Запускай приложение не из под IDE и будет тебе счастье.


 
clickmaker ©   (2009-11-17 18:16) [14]

> Нэ ловица. Почему?

потому что это оконное сообщение.


 
Rouse_ ©   (2009-11-18 00:44) [15]


> clickmaker ©   (17.11.09 18:16) [14]
>
> > Нэ ловица. Почему?
>
> потому что это оконное сообщение.

Ну это не ограничение для сервиса, по крайней мере до висты.
И даже после висты он тоже может абсолютно без последствий для себя иметь окна. Пошаманить правда нужно с некоторыми мелочами.
В свое время долго бился с сокетным сервисом в режиме WSAAsyncSelect без интерактива.
Отказался ввиду не перспективного направления, но даже на семерке старый вариант нормально запустился.
Но увы и ах - не желательно :)


 
Kolan ©   (2009-11-18 12:03) [16]

Понятно, благодарю за разъяснения про отладку и события, буду курить по указанным словам.


 
Kolan ©   (2009-11-19 14:06) [17]

Пара вопросов.

Как получить хендл сервиса для RegisterDeviceNotification?

Как заполнить структуру NotificationFilter? В интернете есть пример с использованием TDevBroadcastDeviceInterface, где взять описание этого типа?


 
Сергей М. ©   (2009-11-19 14:45) [18]


> Как получить хендл сервиса для RegisterDeviceNotification?


см. TService.GetServiceController


 
Kolan ©   (2009-11-19 15:26) [19]

Нашел. А как быть со структурой.

А как быть со структурой? DEV_BROADCAST_HDR описана в модуле DBT, который у меня есть, а где брать DEV_BROADCAST_DEVICEINTERFACE?


var
 Info: DEV_BROADCAST_HDR;
begin
 Info.dbch_size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
 Info.dbch_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
 Info.dbch_reserved := ;

 FNotifyHandle := RegisterDeviceNotification(GetServiceController,
   @Info, DEVICE_NOTIFY_WINDOW_HANDLE);
end;


 
Сергей М. ©   (2009-11-19 15:44) [20]

Известно где - в MSDN.. если, конечно, ни в Jedi ни где-либо еще не нагуглится ..



Страницы: 1 вся ветка

Текущий архив: 2010.01.17;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
2-1259348366
serhiyiv
2009-11-27 21:59
2010.01.17
ListView


3-1233310362
Konrads
2009-01-30 13:12
2010.01.17
операция деления в запросе


2-1259073318
Serov_Kiril
2009-11-24 17:35
2010.01.17
Сортировка ListView по 2-ой колонке


2-1258794558
Б
2009-11-21 12:09
2010.01.17
Почему программа создавая окно - вылетает?


2-1259503740
KaimNotark
2009-11-29 17:09
2010.01.17
как сделать АОН ?