关闭

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

标签: python脚本虚拟机引擎汇编框架
10573人阅读 评论(0) 收藏 举报
分类:

国人有个习惯,每逢吉日,必有“献礼”一说,如今诸事齐至,中秋、国庆、十七大、台海风云激荡、股市楼市日渐疯狂。宋时民谣说:月儿弯弯照九州、几家欢乐几家愁,深夜敲完代码,念及风云际会之时事,我辈之前尘往事与心中理想,不免有苍茫之感。好在今日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并点击提交后,反汇编的结果如下:

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

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

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

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

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:251176次
    • 积分:2992
    • 等级:
    • 排名:第11747名
    • 原创:30篇
    • 转载:0篇
    • 译文:0篇
    • 评论:105条
    最新评论