# 问题解决
本文档记录了一些常见的使用问题,如果您在使用OpenEX最新版本中发现了异常.请递交到
GitHub Issues (opens new window)
# 编译型错误
一旦您的脚本发生编译异常,您会看到控制台打印出以下信息
这里以一个具有语法错误的脚本为例
include "system";
value a = 12;
system.print(b);
1
2
3
4
5
2
3
4
5
openex启动后会输出以下结果
Compile Error: Unable to resolve symbols.
Token: b
Line: 5
Filename: script.exf
Edition: OpenEX Pro
Version: v0.1.4
Location:
system.print(b);
^
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 对照表
以下是所有编译型错误对照表
代号 | 名称 | 说明 |
---|---|---|
need.lr.b | 需要 '}' | 请检查括号是否完整 |
need.lp.b | 需要 '{' | 请检查括号是否完整 |
need.lr.s | 需要 '(' | 请检查括号是否完整 |
need.lp.s | 需要 ')' | 请检查括号是否完整 |
need.sem.marks | 需要 '"' | 请检查引号是否完整 |
need.sem.call | 需要'.' | 请检查函数调用是否缺少符号 |
need.statement.catch | 需要'catch' | 请检查try语句是否有对应的catch语句 |
miss.function.body | 缺少函数体 | function 定义的函数没有代码体 |
miss.statement.body | 缺少语句体 | if while for try 等语句没有代码体 |
type.not.valid | 类型名称无效 | 请检查函数或变量名是否由是标识符类型字段 |
unable.resolve.symbols | 无法解析符号 | 请检查变量是否定义或是否导入运行时库 |
not.statement | 不是语句 | 请检查语句是否完整 |
illegal.expression.start | 非法的表达式开头 | 请检查表达式是否正确 |
illegal.expression.comb | 非法的表达式组合 | 请检查表达式是否正确 |
illegal.string.escape | 非法的转义字符 | 请检查字符串中的转义字符是否正确 |
illegal.key | 非法的关键字 | 变量初始值出现非法关键字 |
outside.function.return | 返回语句位于函数外部 | return 语句定义在函数体外部 |
outside.loop.back | 退出语句位于循环外部 | break 语句定义在循环体外部 |
# 运行时错误
通常这种错误语句的组合是合法的,无法由前端编译器解析出来.但是在运行时会发生异常
这里以一个具有运行时错误的脚本为例
include "system";
value ary = [1,2,3];
system.print(ary[3]);
1
2
3
4
5
2
3
4
5
openex 启动后会输出以下结果
ScriptRuntimeError: Array index out of bounds,length(index:3),index(index:3)
ThreadName: main
FileName: main.exf
Exception: INDEX_OUT_OF_BOUND_EXCEPTION
Edition: OpenEX Pro
Version: v0.1.2
Call stack struct:
at <main.exf>: loader.boot(Script Loader)
at <main.exf>: array.get_object(Runtime Function)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
运行时错误会输出脚本调用栈,通常会夹带每个栈帧的类型
Script Loader
非用户创建, 是执行引擎执行用户脚本用的加载器函数User Script
由用户创建的脚本函数Runtime Function
运行库实现函数,非脚本用户创建. 由运行时本身或外部扩展实现
# 对照表
以下是所有运行时异常
catch
: 是否可以被try-catch
语句处理
名称 | 描述 | catch |
---|---|---|
VM_ERROR | 运行时内部发生错误 | NO |
VM_OP_STACK_ERROR | 栈帧的操作栈发生异常 | NO |
NULL_PRINT_EXCEPTION | 空指针异常 | YES |
INDEX_OUT_OF_BOUNDS_EXCEPTION | 索引越界异常 | YES |
ILLEGAL_ACCESS_EXCEPTION | 非法参数异常 | YES |
FILE_IO_EXCEPTION | 文件I/O操作异常 | YES |
NO_SUCH_FUNCTION_EXCEPTION | 找不到函数异常 | YES |
TYPE_CAST_EXCEPTION | 类型转换发生异常 | YES |
NO_SUCH_VALUE_ERROR | 找不到变量错误 | NO |
冷知识
在 OpenEX Pro
系列中 v0.1.1
版本及以下都是没有异常报错类型和调用栈输出的,被取而代之之前是直接打印出JVM调用栈结构
← 快速上手 Runtime API →