js 实现单步调试



首先实现状态机:
function foo() {
var x = 5;
var y = 6;
return x + y;
}
将函数 foo 变换成状态机,看起来像下面这样:
function foo() {
var $__next = 0, x, y;
while(1) {
switch($__next) {
case 0:
x = 5;
$__next = 1;
break;
case 1:
y = 6;
$__next = 2;
break;
case 2:
return x + y;
}
}
}

保存状态:
debugger 语句被编译成一个抛出 continuation exception 异常的语句。这个异常被 catch 语句捕获,我们在其中处理异常然后再将它重新抛出。
包括调用栈中所以状态

最后恢复执行

实时断点:
将代码的行列位置对应到状态机特定的 case 语句,使得我们能够在代码的任意位置暂停运行,并设置一个断点在那个位置。