Проблема такова: на Висте запускается приложение, состоящее из 2 потоков. Второй поток обрабатывает все файлы на жестком диске.
В общем виде алгоритм 2го потока таков —
try
DoSomeWork;
except
ProcessException;
end;
Так вот, не на всех машинах началась появляться следующая проблема: поток вылетает молча и не пикнув ни разу. Я даже ставил JCL обработчик исключений, который пишет все в лог — не могу поймать ошибку — нет эксепшена и все!
Тогда я начал в случайном месте кода DoSomeWork делать преднамеренные ошибки, приводящие к AV — все нормально обрабатывается в ProcessException, да и в лог пишется. На своей машине баг повторить не могу — подскажите куда копать? Как может возникнуть ситуация когда даже попытка обработать эксепшен не удаетс
Здравствуйте, De-Bugger, Вы писали:
DB>Проблема такова: на Висте запускается приложение, состоящее из 2 потоков. Второй поток обрабатывает все файлы на жестком диске.
DB>В общем виде алгоритм 2го потока таков —
DB>DB>try
DB> DoSomeWork;
DB>except
DB> ProcessException;
DB>end;
DB>
DB>Так вот, не на всех машинах началась появляться следующая проблема: поток вылетает молча и не пикнув ни разу. Я даже ставил JCL обработчик исключений, который пишет все в лог — не могу поймать ошибку — нет эксепшена и все!
DB>Тогда я начал в случайном месте кода DoSomeWork делать преднамеренные ошибки, приводящие к AV — все нормально обрабатывается в ProcessException, да и в лог пишется. На своей машине баг повторить не могу — подскажите куда копать? Как может возникнуть ситуация когда даже попытка обработать эксепшен не удаетс
Наверняка у тебя потоки автоматически разрушаются а ты ждешь их окончания. Если ждать их окончания обязательно в твоей программе то, поставь свойство
FreeOnTerminate класса
Threed в значение
False и разрушай экземпляр класса-наследника Thread ручками, после того, как этот закончил свою работу поток закончил свою работу.
Здравствуйте, De-Bugger, Вы писали:
[Skip]
DB>Тогда я начал в случайном месте кода DoSomeWork делать преднамеренные ошибки, приводящие к AV — все нормально обрабатывается в ProcessException, да и в лог пишется. На своей машине баг повторить не могу — подскажите куда копать? Как может возникнуть ситуация когда даже попытка обработать эксепшен не удаетс
Stack Overflow может тихонечко прибить не только поток, ловится только в дебаггере. Внимательно изучите вызовы, может сделали безконечную рекурсию.
Здравствуйте, Danchik, Вы писали:
D>Stack Overflow может тихонечко прибить не только поток, ловится только в дебаггере. Внимательно изучите вызовы, может сделали безконечную рекурсию.
Именно так и было, проблема лишь в том что я не могу сделать тоже самое на своей машине, только на клиентской