-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
先简单记录一下后期整理报错时, 需要注意的事项
错误类型
可以跳过并继续执行的错误: 暂时不支持;
要处理的错误分为 系统错误 和 用户代码错误 两种
处理方式:
- 系统错误: 在控制台输出错误调用栈 && 在前端投放一个 iview 的 notify 来表示"系统出错".
- 用户代码错误: 输出提示 string 和错误最可能出现的行号 line, 交给前端处理
错误触发时机: - 用户代码错误:
- 语法分析的 parser 报错
- semCheck 阶段类型错误
- 构建符号表时的作用域错误
- 下文提到的调度算法错误
- 系统错误:
- 最常见的是 undefined.get 这种访问错误, 需要用 try catch 来捕获
调度算法
y = splitjoin (data) {
int i, j;
split roundrobin(1,2,1);
for (i = 0; i < 3; i++) {
add rTest(); // sliding(1,1); tumbling(1)
}
join roundrobin(1,1,1);
};
这种情况下,
第一次调度 join 会使得 join 的执行次数为1, rTest 执行1次产生1个数据, join 执行1次也处理1个
但第二次的 rTest 来调度 join 时, rTest 执行2次产生2个数据, 而 join 只能接受处理1个, 此时调度算法会希望让 join 的调度次数*2
因此, 关于 join 的调度次数上出现歧义, 这个异常不是系统异常, 而是用户代码错误.
处理: 需要向用户抛出错误, 提示 "请检查 join roundrobin(1,1,1) 的参数是否正确"
Metadata
Metadata
Assignees
Labels
No labels