Состояния целевого устройства, исключения
Хорошо, что вы здесь! О состояниях целевого устройства действительно есть что узнать!
В состоянии RUN виртуальная машина выполняет ваше приложение. Это не значит, что какой-то код выполняется постоянно.
TiOS - система, управляемая событиями, и она выполняет обработчики событий в ответ на события. Если событий для обработки нет, виртуальная машина простаивает и готова обработать следующее событие, когда оно придёт.
Пока виртуальная машина выполняет код, значения переменных на панели Watch не обновляются.
Состояния PAUSE, BREAK и ABORT означают, что виртуальная машина остановлена и никакой код не выполняется.
Главный процесс при этом продолжает заниматься своими делами и генерировать события. Эти события ждут в очереди событий и будут обработаны виртуальной машиной, когда выполнение возобновится.
Значения переменных на панели Watch обновляются, как только целевое устройство выходит из состояния RUN.
Вот чем отличаются эти три состояния:
Состояние PAUSE означает, что выполнение приостановлено, когда виртуальная машина простаивала, то есть не выполняла никакие обработчики событий.
Указатель программы не отображается, потому что никакая процедура (функция) не выполняется.
Это состояние возможно, только если вы вручную приостановили выполнение (Debug > Pause) или перезагрузили целевое устройство (Debug > Restart).
Состояние BREAK означает, что выполнение приостановлено, когда виртуальная машина была занята выполнением обработчика события.
Указатель программы будет отображаться.
Это состояние возникает, если вы вручную приостановили выполнение (Debug > Pause) или выполнение остановилось на точке останова.
Состояние ABORT означает, что выполнение приостановлено из-за исключения. Это также означает, что виртуальная машина была занята выполнением обработчика события.
Указатель программы будет отображаться. Ниже приведена таблица возможных исключений:
| Код | Описание | Остановка в режиме отладки? | Остановка в режиме релиза? |
| HALT | Вызвано выполнением метода sys.halt. Это исключение генерируется самой программой, так что не вполне «настоящее». | Да | Да |
| DIV0 | Деление на ноль. | Да | Нет |
| OOR(1) | Выход за границы диапазона (то есть попытка обращения за последний элемент массива). Само ошибочное обращение будет предотвращено. | Да | Нет |
| FPERR | Ошибка вычислений с плавающей запятой. | Да | Нет |
| IOC(2) | Недопустимый код операции. | Да | Да |
| OUM(2) | Обращение за пределы пользовательской памяти. | Да | Да |
| TDLF(2) | Не удалось загрузить двоичную библиотеку. | Да | Да |
- Проверки выхода за границы выполняются только для массивов Tibbo BASIC, которые являются «безопасными». Массивы TIBBO C небезопасны, и у TiOS нет возможности перехватывать для них выход за границы.
- Вы никогда не должны видеть эти ошибки. Сообщите нам, если вам встретится любая из них!