Обработка ошибок
 
Обработка 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 для установки кодов ошибки , имеет смысл использовать более высокие значения, чтобы избежать наложений со списком встроенных кодов ошибок. (Этот встроенный список может быть расширен позже.)

См. также