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

原创 2007年09月29日 23:55:00

国人有个习惯,每逢吉日,必有“献礼”一说,如今诸事齐至,中秋、国庆、十七大、台海风云激荡、股市楼市日渐疯狂。宋时民谣说:月儿弯弯照九州、几家欢乐几家愁,深夜敲完代码,念及风云际会之时事,我辈之前尘往事与心中理想,不免有苍茫之感。好在今日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目前已经可以正确地将简单脚本(不涉及函数、类等复杂机制)的运行时栈可视化地展示出来,当然,目前仅仅是一个初步的突破,下一步的目标是加入字节码指令的可视化和当前执行指令的可视化。 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

重读《Python Tutorial》

最近在重新阅读刘鑫翻译的《Python Tutorial》,发现Guido真是字字珠玑啊......

Python源码剖析[15] —— 最简单的Python实现:Small Python

[绝对原创 转载请注明出处]Python源码剖析——Small Python本文作者: Robert Chen (search.pythoner@gmail.com ) 1.      Small P...

Cobra —— 用于显示当前执行字节码的GUI部件

最近忙于公司项目上线,Cobra的进度有点慢了,不过今天有了新的成果了,一个展示反编译结果并能高亮显示当前正在执行的GUI部件——pySrcPanel。下图展示了基于pySrcPanel构建的一个de...

回归

一晃多年,看到2008年7月最后一篇博文,真有点唏嘘的感觉,从今天起,回归我的博客。 分享,改变世界 :)

Cobra —— 迈进Ajax时代

公司目前正在积累Web2.0的相关技术,正好就拿Cobra来练练手。以后的Cobra将放弃基于wxPython的GUI方式,而是改用基于DHTML+Ajax的技术。在GUI上做出动态的视觉效果实在是一...

Cobra —— 对Python源文件进行完整反汇编

不论是Python标准库中自带的dis,还是我们之前看到的sdis,都只能一次对一段代码进行反汇编,对于Cobra来说,这还不是很方便。为了在Cobra的GUI界面中显示对一个.py文件完整的反汇编结...

Cobra —— 可视化Python虚拟机

开始着手一个项目,Cobra(眼镜蛇),希望可视化Python虚拟机的内部运行状态,初步的想法Cobra分为下面两方面:1、 Cobra Server:修改Python源代码,通过socket和cli...

Cobra——client与server通信

Cobra的基本框架有了一个雏形,Cobra的client和server之间的通信能够实现,同时,也能够使Python虚拟机在client的控制下运行。由于client需要向server传递两类独立的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)