Cobra —— "下一步"与运行时栈的可视化

国人有个习惯,每逢吉日,必有“献礼”一说,如今诸事齐至,中秋、国庆、十七大、台海风云激荡、股市楼市日渐疯狂。宋时民谣说:月儿弯弯照九州、几家欢乐几家愁,深夜敲完代码,念及风云际会之时事,我辈之前尘往事与心中理想,不免有苍茫之感。好在今日Cobra有重大进展,以此为“礼”,献与今日之激荡心绪。不亦快哉,不亦快哉。

Cobra终于完成了一个重要的突破,在Python虚拟机可视化方面,今天实现了简单脚本的运行时栈的可视化。Python虚拟机的基本运作原理可见《Python执行引擎之框架》,《Python执行引擎之一般表达式(1)》。下面可以通过一个简单的脚本看一看可视化的效果。

首先,在Cobra的主界面上,增加了“下一步”和“执行”两个按钮,其功能类似于IDE的debugger中的“next step”和“run”。当我们指定一个脚本文件之后,不断地点击“下一步”,就能可视化地看到运行时栈一步步的变化情况。

这里所采用的脚本非常简单:
【demo1.py】
 a = 1
 b = 2
 c = a + b
 print c
 
选择demo1.py并点击提交后,反汇编的结果如下:

同时在主界面的“运行时栈”区域出现了第一条字节码指令前的运行时栈:

Cobra —— "下一步"与运行时栈的可视化_第1张图片

当点击“下一步”后,Python虚拟机执行“LOAD_CONST 0 (1)”这条字节码指令,这条指令会影响运行时栈,所以指令执行后的运行时栈为:

点击“下一步”后,指令“STORE_NAME 0 (a)”会被执行,该条指令会从运行时栈中弹出栈顶元素,所以执行指令后的运行时栈为:

Cobra —— "下一步"与运行时栈的可视化_第2张图片

同样,当执行了“b = 2”对应的“LOAD_CONST 1 (2)”字节码指令后,运行时栈为:

Cobra —— "下一步"与运行时栈的可视化_第3张图片

最后,在执行“c = a + b ”对应的两条LOAD_NAME指令后,运行时栈为:

Cobra —— "下一步"与运行时栈的可视化_第4张图片

可以看到,Cobra目前已经可以正确地将简单脚本(不涉及函数、类等复杂机制)的运行时栈可视化地展示出来,当然,目前仅仅是一个初步的突破,下一步的目标是加入字节码指令的可视化和当前执行指令的可视化。 

你可能感兴趣的:(框架,虚拟机,python,汇编,脚本,引擎)