Как я могу отлаживать код AutoIt?
Синтаксис
Au3Проверить
Согласно Документация - Введение - Средство проверки синтаксиса AutoIt (Au3Check):
Проверяет скрипт на наличие синтаксических ошибок.
Пример:
#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7
Сообщает (почти) обо всех ошибках, не связанных с выполнением, до выполнения и компиляции.
Время выполнения
Текущая строка
покажи мне какой код выполняется в реальном времени
Согласно Документация — Справочник по функциям — AutoItSetOption()
:
TrayIconDebug
Если включено, показывает текущую строку скрипта в подсказке значка на панели задач для облегчения отладки.
Пример:
AutoItSetOption("TrayIconDebug", 1)
Скомпилированные скрипты
#AutoIt3Wrapper_Run_Debug_Mode=Y
запускает сценарий с отладкой консоли.
Из-за предустановленных включаемых файлов номера строк (в сообщениях об ошибках) скомпилированных скриптов не совпадают с исходным файлом .au3. Согласно Документация - SciTE4AutoIt3 - Au3Stripper:
Если ошибок нет, запустите Au3Stripper, чтобы создать очищенный исходный файл Scriptname_Stripped в той же папке, содержащей весь исходный код (скрипт и любые файлы #include).
Пример:
#AutoIt3Wrapper_Run_Au3Stripper=y
Номера строк в сообщениях об ошибках скомпилированных скриптов теперь совпадают с номерами в scriptname_stripped.au3
(присутствуют после компиляции).
Коды ошибок и возвращаемые значения
ConsoleWrite()
. Add #AutoIt3Wrapper_Change2CUI=y
if to be read from compiled script.
- Macros of use include
@error
, @extended
and @ScriptLineNumber
SciTE4AutoIt3
> Tools
> Trace: Add Trace Lines
вставляет такую команду для каждой строки. Отображает текущий код @error
(и соответствующую строку).
SciTE4AutoIt3
> Tools
> Debug to Console
(Alt + D) вставляет такую команду для текущей выбранной строки. Отображает @ScriptLineNumber
, возвращаемое значение и код @error
. Выполняет исходную строку второй раз для возвращаемого значения (может быть нежелательным).
VarGetType()
возвращает внутреннее представление типа варианта.
_ArrayDisplay()
для просмотра структуры и содержимого переменных массива.
- Возможно записывать в файл или база данных на случай удаленной отладки.
- Ошибка регистрации UDF (пример) для упрощение.
Утверждения
Согласно Документация — Справочник по пользовательским функциям — _Assert()
:
Отображать сообщение, если утверждение не выполняется
Связано. Полезно для регрессионных тестов и для проверки пограничных случаев и предположений (или просто для прерывания в случае непредвиденных обстоятельств). Связанные функции включают в себя:
Обработка ошибок
Обычно функции возвращают либо (или их комбинацию) возвращаемое значение, либо -код ошибки. Значения кода ошибки, отличные от 0
(иногда отрицательные), означают сбой. Возвращаемые значения (если используются как таковые) чередуются между 0
(неудача) и 1
(успех).
Обрабатывайте ошибки по мере их появления. Сценарии отлаживают себя для правильной обработки ошибок. Избегайте постепенного вложения If
операторов. Пример:
Global Enum $RANDOM_FLT, _
$RANDOM_INT
Global Enum $ERROR_OK, _
$ERROR_AIR, _
$ERROR_WATER, _
$ERROR_FOOD, _
$ERROR_ENUM
Global $g_aError[$ERROR_ENUM]
$g_aError[$ERROR_OK] = 'survived'
$g_aError[$ERROR_AIR] = 'no air'
$g_aError[$ERROR_WATER] = 'no water'
$g_aError[$ERROR_FOOD] = 'no food'
Global Const $g_sMsgConsole = 'error:%i - %s\n'
While True
Live()
If @error Then
ConsoleWrite(StringFormat($g_sMsgConsole, @error, $g_aError[@error])); And one of following:
ContinueLoop
; ExitLoop
; Return; If in Local scope.
; Exit @error
EndIf
; Continuation conditional to successful execution of Live():
ConsoleWrite(StringFormat($g_sMsgConsole, @error, $g_aError[@error]))
WEnd
Func Live()
Local Const $iError = Random($ERROR_OK, $ERROR_ENUM - 1, $RANDOM_INT), _
$iExtended = 0, _
$iReturn = $iError ? 0 : 1
Return SetError($iError, $iExtended, $iReturn)
EndFunc
Или точнее:
Live()
Switch @error
Case $ERROR_AIR
; Handle specific error here.
Case $ERROR_WATER
; Handle specific error here.
Case $ERROR_FOOD
; Handle specific error here.
EndSwitch
Возвращаемые значения позволяют использовать такие конструкции, как:
If Not SomeFunction() Then
; Handle here.
EndIf
; Continuation of script here.
Может помочь сопоставление кодов ошибок с текстовыми сообщениями. Особенно полезно, если они совместно используются несколькими связанными функциями, которые вызывают друг друга, прозрачно возвращая коды обнаруженных ошибок (например, некоторые FindOnPage()
возвращают $ERR_PAGELOAD
из зависимости LoadPage()
).
person
user4157124
schedule
26.05.2018