У меня в приложении есть дополнительный поток для опроса, который использует indy 9.018. Этот поток пытается установить соединение
( если оно не установлено) и произвести обмен. В потоке отлавливаются все exception связанные c работой indy. Так вот в delphi 5 (sp1+adoupdate2), если не запретить перехват EIdException и EIdSlientException, то попытка запуска приложения из под Delphi часто приводит к повисанию всей системы. А если попробовать что нибудь по отлаживать в основном потоке при запрещенном перехвате EIdException и EIdSlientException, то при выполнении пошаговой отладки можно заметить произвольные перескакивания в модули indy (особенно когда ошибка происходит на стадии конекта) и в д.р. модули. Так же, если использовать FastMM, то после нескольких минут таких перелетов по модулям и процедурам появляется сообщение о повреждении памяти. Так же после перелетов по модулям и процедурам иногда программа переходит в режим отладки там где даже не установлены брейкпоинты. Если в Delphi запретить вообще отлов exception, сняв флажок "Stop on Delphi Exceptions", то при отладке ни каких прыжков в постороннии модули и процедуры не наблюдется. Так же если запускать приложение не из под Delphi то тоже ни каких глюков не наблюдается.
Проверка на Delphi 7 SP1.1 показала такие же фокусы, только без зависаний при эксепшинах в потоках.
У меня возникло подозрение, что Delphi при возникновении Exceptions (перехват которых отключен, т.е. они указаны в списке Exception types to Ignore) в дополнительных потоках и при выполнении в основном потоке пошаговой отладки начинает себя вести как то странно : резко переключается c кода в основном потоке на код выполняемый в дополнительном потоке после exception, а потом вновь возвращается в основной поток (при этом эти переключения могут сопровождаться повреждением памяти).
Собственно хотелось бы узнать это такой глюк delphi (т.е. кто нибудь наблюдал подобное) или мне нужно искать косяки у себя в коде.
[Skip]
А>Собственно хотелось бы узнать это такой глюк delphi (т.е. кто нибудь наблюдал подобное) или мне нужно искать косяки у себя в коде.
Это глюк дебаггера, при трассировании многопотрочного приложения может вывалить AV в запускаемой программе.
Re[2]: Delphi, отладка, Exception в потоках
От:
Аноним
Дата:
18.07.06 12:47
Оценка:
D>Это глюк дебаггера, при трассировании многопотрочного приложения может вывалить AV в запускаемой программе.
Раньше работал с потоками, но такого поведения как я описал выше не наблюдал. Иногда, очень редко, случались зависания приложения при запуске, и то это было под Win98 а тут такие фокусы да еще и под 2000 и XP. А где нибудь можно по подробнее прочитать про подобные глюки дебаггера ?
D>>Это глюк дебаггера, при трассировании многопотрочного приложения может вывалить AV в запускаемой программе.
А>Раньше работал с потоками, но такого поведения как я описал выше не наблюдал. Иногда, очень редко, случались зависания приложения при запуске, и то это было под Win98 а тут такие фокусы да еще и под 2000 и XP. А где нибудь можно по подробнее прочитать про подобные глюки дебаггера ?
Чисто мои наблюдения. Дебажиш, дебажиш, и тут тебе AV просто из ничего.
D>Чисто мои наблюдения. Дебажиш, дебажиш, и тут тебе AV просто из ничего.
вообще то AV из ничего не наблюдал, но некая неадекватность среды при брекпоинтах в потоках иногда случается (выглядит так, будто среда умирает на несколько секунд, иногда приходится снимать аварийно).. И еще сложилось впечатление, что такой проблемы под W2000 не было, хотя может это не совсем верно — просто в то время не очень занимался многопоточным программированием.
Сейчас практически отказался от практики использования брекпоинтов и трассировки в многопоточных приложениях, как средство отладки — вывод в текстовых лог файл, логирование активизируется только директивами условной компиляции. В общем случае даже быстрее выходит. А иногда это единственно триемлемый способ, так как довольно часто приложение чувствительно к временным задержкам, которые неизбежно возникают при ьрекпоинтах и пошаговой трассировке + всякие там длл которые запускаются бог знает кем и бог знает когда, не всегда даже при желании к ним можно штатным отладчиком подступится, а если и можно, то немного с танцами с бубном..