![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тихо умирающее приложение [D7, WinXP]
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 потока), а потом часами сидеть и анализировать зависимости между записанными в лог строчками.
Загляни также в системный журнал работы ОС. Из него порой удается извлечь толк.