Что нового

Игнорирование простых ошибок AutoIt'ом

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Доброго времени суток
Скорее всего эта тема не попадает под правила, поэтому никаких ссылок и туториалов тут нет.

Интересует следующее: почему разработчики не сделали возможность игнорировать некоторые ошибки, которые возникают в процессе выполнения скрипта? Так мало того не игнорирует, он еще и уведомляет об этом без возможности отключения.
В некоторых ситуациях необходимо выполнить некоторые действия при выходе ( которые выполняла у вас функция OnAutoItExitRegister ), однако ошибка, которую как казалось бы ввиду специфического алгоритма AutoIt - обойти невозможно, этого не позволяет.

Код:
MsgBox( 64, '', 'Press OK to Error' )
Local $arr[0]
MsgBox( 64, '', ':)'
MsgBox( 64, '', ':)' )

Этот код на обычной версии выполнить невозможно, однако если ее поправить - выполняется без проблем (игнорируя неверные строки). Более того, возможно даже во время ошибки запускать процедуру выхода ( Exit ) с последующим выполнением OnAutoItExitRegister.

Ваше мнение: Нужно ли это AutoIt'у?

Вопрос администрации: будет ли считаться нарушением правил если сообщить эту информацию рядовым пользователям?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Это работает как патч? Можно ли сделать что бы не показывалось окно с сообщением, вызывалась какая нибудь функция, которая зафиксировала бы суть проблемы и скрипт тихо завершился?
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
inververs
Да, работает как патч.

inververs [?]
Можно ли сделать что бы не показывалось окно с сообщением, вызывалась какая нибудь функция, которая зафиксировала бы суть проблемы и скрипт тихо завершился?
Я особо не обдумывал варианты фиксации проблемы, однако:
-Тут есть две функции, одна я как понял вызывается при включенном параметре /AutoIt3OutputDebug, а вторая в обычной ситуации.
--Можно отключить эти функции, в этом случае не будет уведомлений и скрипт продолжит выполняться дальше игнорируя ошибки.
--Так же можно изменить вторую функцию ( которая с уведомлением http://puu.sh/bdORq/d276ff0fb2.png ) и отключить его, а далее передать управление на функцию Exit с последующим выполнением OnAutoItExit.

Что же на счет фиксации проблемы:
Теоретически можно уложить текст самой ошибки ( он опять же фигурирует в обеих функциях ) в определенную константу, скажем $AutoIt_ErrorMessage(чего сделать моих навыков не хватит) и парсить этот текст в функции OnAutoItExit которой я передал управление.

Еще есть вариант: В случае вызова второй функции - перенаправлять это дело в первую ( MessageBox'а не будет ) и модифицировать ее ( передавать управление в OnAutoItExit ), в этом случае выполнится все как и в прошлом варианте, только сама проблема выйдет в Console output ( с выполнением OnAutoItExit).
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Третий вариант: в скрипте обозначаем фиксированную функцию on_autoit_crash($text) и в случает падения программы перекидывает выполнение туда. Патчим собранный екзешник. Ладно, если нельзя узнать текст ошибки, тоже не плохо. Тогда в on_autoit_crash делает тихо запись что программа упала по неведомой ошибки и выходим.
Вот такой вариант интересный.

Ну или у вас есть патчи которые делают хотя бы варинат с перенаправлением на OnAutoItExit то тоже не плохо, хотел бы взглянуть.


Добавлено:
Сообщение автоматически объединено:

В падении программы я имеею ввиду критические ошибки синтаксиса, когда программа не выполянется дальше, показывается сообщение. Вот это сообщение бы убрать. Если еще можно как то залогировать текст ошибки, было бы идеально.
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
inververs [?]
В падении программы я имеею ввиду критические ошибки синтаксиса, когда программа не выполянется дальше, показывается сообщение. Вот это сообщение бы убрать.
Это не проблема, уже убрано. А вот с логированием текста беда - идеи есть, но навыков их осуществить нет.

Убирает уведомление о ошибке и переходит к OnAutoItExit.
Код:
>AutoIt3.3.9.4x64_Compiled.exe
00000000000708C6:FF->90
00000000000708C7:15->90
00000000000708C8:1C->90
00000000000708C9:55->90
00000000000708CA:02->90
00000000000708CB:00->90
Отловить подобное падение можно разве только @ExitCode=1

Игнорирует ошибки типа - Syntax error.
Код:
>AutoIt3.3.9.4x64_Compiled.exe
00000000000706C0:48->C3
00000000000706C1:8B->90
00000000000706C2:C4->90

P.S. В 3.3.9.4 меня все устраивает - вот и остался :smile:


Добавлено:
Сообщение автоматически объединено:

Можно целую тему заводить о патчах на AutoIt ( если позволят ), сам бы хотел перенять опыт и увидеть более изящные решения.

Таким образом к примеру можно обойти ошибку при открытии скрипта:
000000000003BAC8:2F->4A
 
Верх