Что нового

И снова об обработке ошибок

alex33

Скриптер
Сообщения
1,457
Репутация
186
Итак. Всем, думаю, знакома подобная ошибка?
$oObject^ ERROR
Error: The requested action with this object has failed.
Она может проявляться как всегда, так и совершенно неожиданным образом. Как сразу, так и через несколько секунд / минут / часов работы скрипта.
Функция IsObj выдает True, так что каждый раз если ее проверять, ошибки не избежать все равно.
Проверки через If и прочие операторы тоже успеха могут не принести.
Установка ObjEvent AutoIt.Error тоже не всегда срабатывает.

Чаще всего она проявлялась либо при работе с IE, либо с JAVASCRIPTCONTROL.

И как же быть тогда? Не запускать же два процесса, чтобы второй следил за первым и при необходимости перезапускал его...

Когда там уже новая версия AutoIt, чтобы можно было сделать так?
Код:
Try
	; код
Catch Er
	; обработка исключения
;~ Finally
	;~ ; выполнить в любом случае
EndTry
2018 ведь уже скоро...
 

SuperSonic

Новичок
Сообщения
25
Репутация
1
Да знакомая тема, помню сам когда-то бодался с периодическим отвалом скомпилированного скрипта, особенно если он достаточно "тяжелый" и работает долгое время, то такое странное поведение гарантировано. Причем он может просто зависнуть без каких либо окошек с ошибками. В поисках решения выкопал такую инфу, что в процессе работы в оперативной памяти скапливается мусор и в какой-то момент его там становится так много, что процессор может начать читать этот мусор. Короче как повезет.

В общем теперь запускаю основной скрипт которые пингует лог файл и второй небольшой скрипт, который раз в пару минут проверяет этот файл и если пинга давно не было, то вырубает основной скрипт и запускает его снова. И пока такое решение спасает :ok:
 

Prog

Продвинутый
Сообщения
537
Репутация
65
SuperSonic [?]
В поисках решения выкопал такую инфу, что в процессе работы в оперативной памяти скапливается мусор и в какой-то момент его там становится так много, что процессор может начать читать этот мусор.
Этот как называемый "мусор" - утечки памяти, которые возникают из-за халатного написания программы. Где-то забыли память освободить, а где-то дескриптор не закрыли или объект не освободили. Если это повторяется многократно, то может привести к вышеописанным проблемам. Нужно аккуратно писать код не забывая освобождать все что больше не нужно и тестировать программы в различных режимах для выявления и устранения ошибок.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Проблему работы с объектами в последнем релизе 3.3.14 признают даже на официальном форуме. Насколько я понял, решить эту проблему можно несколькими способами:
1. (кардинальный) Откатиться на релиз 3.3.12.
2. Использовать ObjEvent("AutoIt.Error", ...) в каждой функции, работающей с объектом. Соответственно, нужно править функции некоторых UDF.
3. Не использовать многоуровневые вызовы методов. Например заменить
Код:
$oExcel.Windows($oWorkbook.Name).Visible = $bVisible
на
Код:
Local $oWindow = $oExcel.Windows($oWorkbook.Name) ; <== Modified
    If IsObj($oWindow) Then $oWindow.Visible = $bVisible ; <== Modified
оригинал

alex33 [?]
Когда там уже новая версия AutoIt
На официальном форуме периодически подымается данный вопрос. Суть ответов сводится к тому, что Jon, разработчик языка, в данный момент находится в "творческом отпуске". Открывать код он пока не собирается. Поэтому, поклонникам языка, остаётся только ждать, надеяться и придумывать "костыли" для обхода существующих проблем.
 
Верх