Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];

Вниз

Как пользоваться программой 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
2-1258705344
Мишаня
2009-11-20 11:22
2010.01.17
Как узнать курс валют?


15-1258409121
Германн
2009-11-17 01:05
2010.01.17
Клиент ДМ


1-1233308348
kyn66
2009-01-30 12:39
2010.01.17
FileListBox1 - отсутствует сортировка


15-1258188830
И. Павел
2009-11-14 11:53
2010.01.17
Позиционирование в JavaScript


2-1258963629
Knight
2009-11-23 11:07
2010.01.17
Как правильно сделать запрос-ответ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский