错误处理
 
处理运行时错误。

FreeBASIC可以通过以下方式处理错误:
  • 默认情况下,程序不会对错误执行任何操作 - 它们会被忽略并且代码继续。在这种情况下,代码应该使用Err函数处理下一行中的可能错误。
  • 如果使用-e -ex 选项编译,FreeBASIC使用类似QB的错误处理。
  • 未来FreeBASIC的OOP版本可能有一个类似java的TRY..CATCH ... FINALLY异常处理程序。

注意:以下信息有效,除非该错误产生OS常规保护故障(例如,如果程序在进程内存区域外写入)。在这些情况下,操作系统将立即停止程序并发出错误:没有什么可以从FreeBASIC内部避免。

默认错误处理


默认的FreeBASIC行为是设置ERR变量并继续。

Dim As Integer e
Open "xzxwz.zwz" For Input As #1
e = Err
Print e
Sleep


(示例程序假设没有xzxwz.zwz文件)。程序不停;它设置ERR变量并继续。可以在下一行处理错误。

一些IO功能,如OpenPut #...可以以函数形式使用,如果成功则返回错误号或为零。

Print Open ("xzxwz.zwz" For Input As #1)
Sleep


QuickBASIC类错误处理


如果在编译时使用-e -ex 开关,那么该程序应该启用类似QB的错误处理程序。如果没有处理程序处理错误,程序将停止并出现错误。

注意:如果使用QB-Like错误处理,程序员应准备好处理所有错误条件。

'' Compile with QB (-lang qb) dialect

'$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语句允许在发生错误的相同SubFunction的末尾设置本地错误处理程序。

'' Compile with -e
'' The -e command line option is needed to enable error handling.

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(继续在下一条指令)结束。

错误代码


有关运行时错误号及其相关含义的列表,请参阅运行时错误代码.

没有定义用户错误代码范围。如果Error用于设置错误代码,那么使用高值避免与内置错误代码列表的冲突是明智之举。(此内置列表可能会稍后扩展。)

参考