Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тихо умирающее приложение [D7, WinXP]


Страницы:   1 2 3

AlexNe ©   (2008-07-05 18:41:00) 

Уважаемые эксперты! Похоже я своими стараниями попал
в ситуацию из которой пока не вижу выхода.
Суть проблемы:
Имеется приложение, работающее с различными удаленными серверами через TSocketConnection, c базой данных Interbase, и с сервером реального времени, который крутится на DOS машине - соотв. через синхронный сокет TIdTCPClient.
Для работы с каждым сервером имеется отдельный поток,
причем поток сокета TIdTCPClient имеет наивысший приоритет.
Приложение работает под WinXP,  работает без замечаний иногда 9 часов, иногда 3, затем элегантно, без каких либо сообщений схлопывается (а следом закрываются сервера).
Отслеживание возникающих исключений
(посылка сообщений из Application.OnException другой программе) не дало ничего - все чисто до самого схлопывания.
Запустить программу надолго под отладчиком Delphi я не имею возможности.
Безуспешные попытки найти причину доводят меня до отчаяния.
Уже вырубил на всех TSocketConnection  свойство SupportCallBacks в False. Во всех Еxecute потоков защитил в
try-except все что только возможно - не помогает!

Может быть кто-нибудь сталкивался с похожей ситуацией при работе с потоками, или подскажет хотябы в какую сторону искать. Буду признателен за любые замечания


AlexNe   (2008-07-05 19:56:00) [41]

Нет, ну конечно, там стоит Exception.Message когда оно есть, плюс номер тика, когда случилось. Или я чего-то не понял? В смысле засунуть туда HandleException?


Loginov Dmitry   (2008-07-05 19:41:00) [42]

> except
>   Txt := 'Интересующие параметры';
>   cds.cbData := length (Txt);
>   cds.lpData := PChar (Txt);
>   SendMessage (hwnd, wm_CopyData, 0, Integer (@cds));
> end;


А оригинальный текст сообщения об ошибке разве не интересует?


AlexNe   (2008-07-05 19:41:00) [43]

to Сергей М.
не, сервера тоже самопальные :)  
они и должны в случае пропадания всех клиентов закрываться.
А трындец действительно полный.


AlexNe   (2008-07-05 19:38:00) [44]

Одна из возможных причин схлопывания, как мне думалось, возникновение Exceptions внутри execute потока.
Действительно, когда снабдил потоки механизмом передачи логов - что-то вроде

procedure TMainTread.Execure;
var Hwnd: THandle;
 Txt: string;
 cds: CopyDataStruct;
begin
..........
 try
 .....
 except
   Txt := 'Интересующие параметры';
   cds.cbData := length (Txt);
   cds.lpData := PChar (Txt);
   SendMessage (hwnd, wm_CopyData, 0, Integer (@cds));
 end;
.........
end;

обнаружил, что в потоке образуется за секунду куча исключений, которые
не выводятся на экран! Ну и через некоторое время операционка очевидно
убивает приложение.
Фишка в том, что эти ошибки я выловил и убрал, а проблема осталась!

Системный журнал щас пойду копать, спасибо за совет.


Сергей М.   (2008-07-05 19:20:00) [45]


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


> следом закрываются сервера


Полный трындец - рухнул кривой самопальный клиент, и в солидарность ему тут же рухнул сервер-бренд)

Или нет ? Или совсем не так дело обстоит ?)


Loginov Dmitry   (2008-07-05 18:59:00) [46]

> или подскажет хотябы в какую сторону искать.


Копать следует путем записи в лог всего и вся (все действия приложения, все сообщения об ошибках с указанием ID потока), а потом часами сидеть и анализировать зависимости между записанными в лог строчками.

Загляни также в системный журнал работы ОС. Из него порой удается извлечь толк.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо