Обработка runtime ошибок.
FreeBASIC может обрабатывать ошибки следующим образом:
- По умолчанию программа ничего не делает с ошибками - они просто
игнорируются и код продолжается. В этом случае код должен обрабатывать
возможные ошибки в следующей строке с помощью функции Err.
- Если скомпилировано с опциями -e или -ex
, FreeBASIC использует обработку ошибок как в QB.
- Будущие OOP версии FreeBASIC могут иметь реализацию обработчика
исключений как в java TRY..CATCH...FINALLY.
Примечание: Следующая информация действительна, если ошибка не
производена OS General Protection Fault (например, если программа пишет за
пределами области памяти процесса). В этих случаях OS немедленно остановит
программу и выдаст ошибку:
FreeBasic здесь никак
не поможет.
Обработка ошибок по умолчанию
Поведение FreeBASIC по умолчанию: установка переменной ERR и продолжение
работы.
Dim As Integer e
Open "xzxwz.zwz" For Input As #1
e = Err
Print e
Sleep
(Пример программы предполагает не существование xzxwz.zwz файла). Программа
не останавливается; она устанавливает переменную ERR и продолжает работу.
Ошибка может быть обработана в следующей строке.
Некоторые функции ввода\вывода , такие как
Open
и
Put #... могут использоваться в
виде функции, возвращая номер ошибки, или нуль если успешно.
Print Open ("xzxwz.zwz" For Input As #1)
Sleep
Обработка ошибок как в QuickBASIC
Если во время компиляции подключены опции
-e
или
-ex , ожидается, что программа
будет иметь обработчик ошибок как в QB. Если обработчик не обрабатывает
ошибку, программа останавливается с ошибкой.
Обратите внимание: Если используется обработка QB-подобных ошибок,
программист должен быть готов к обработке всех ошибок.
'' Компилировать с QB (-lang qb) диалектом
'$lang: "qb"
On Error Goto FAILED
Open "xzxwz.zwz" For Input As #1
On Error Goto 0
Sleep
End
FAILED:
Dim e As Integer
e = Err
Print e
Sleep
End
On Error задает процедуру, в которую
программа перейдет, когда будет обнаружена ошибка для ее обработки.
On Error Goto 0
отключает обработку ошибок.
Если процедура обработки ошибки не задана, то когда происходит ошибка,
программа будет остановлена и будет отправлено в консоль сообщение об
ошибке.
Aborting program due to runtime error 2 (file not found)
Процедура обработчика ошибок может
быть в конце программы, как и в QB.
On Local Error
заявления позволяют устанавливать процедуру обработчика локальных ошибок в
конце
Sub или
Function,
в которых произошла ошибка.
'' Компилировать с опцией -e
'' Командная опция -e необходима для включения
обработчика ошибок.
Declare Sub foo
foo
Sleep
Sub foo
Dim filename As String
Dim errmsg As String
filename = ""
On Local Error Goto fail
Open filename For Input Access Read As #1
Print "No error"
On Local Error Goto 0
Exit Sub
fail:
errmsg = "Error " & Err & _
" in function " & *Erfn & _
" on line " & Erl
Print errmsg
End Sub
Если опция
-e используется
(независимо от
-lang диалекта),
обработчик ошибок должен завершить программу.
С опцией
-ex и
-lang qb
диалектом только, процедуру ошибок можно завершить с помощью
Resume (повторяет
инструкцию, которая вызвала ошибку) или
Resume Next (продолжается
на следующей инструкции) .
Коды ошибок
Смотрите
Runtime коды ошибок для
ознакомления с перечнем номеров ошибок во время выполнения и связанных с
ними смысла.
Пользовательские ошибки не определены. Если используется
Error
для установки кодов ошибки , имеет смысл использовать более высокие
значения, чтобы избежать наложений со списком встроенных кодов ошибок. (Этот
встроенный список может быть расширен позже.)
См. также