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

栈的基本操作 出栈与入栈

#include #include #define LENGTH 100 //初始分配栈的长度 #define ADD_LEN 10 //栈长增量 typedef struct {//构造栈的数据类...
  • LucienDuan
  • LucienDuan
  • 2014年08月01日 11:02
  • 2350

入栈出栈规律·

相信大家都做过类似这样的题目: 已知入栈序列为:1 2 3 4 5,这5个数一次入栈,出栈顺序、时机任意。 则下列可能的出栈序列不正确的是() A 1 2 3 4 5 B 3 2 1 5 4 ...
  • u014424628
  • u014424628
  • 2015年11月08日 15:35
  • 4567

通俗讲解入栈、出栈(C语言)

**解释入栈出栈原理:栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或...
  • a1b2c3d4123456
  • a1b2c3d4123456
  • 2015年12月17日 10:36
  • 4847

由入栈123出栈顺序引发的思考

由入栈123出栈顺序引发的思考 最近在看数据结构,一道题引起了我的注意。 目录 由入栈123出栈顺序引发的思考    1 1、题    1 2、栈的理解    1 3、由题引发的思考    2...
  • cszhang570221322
  • cszhang570221322
  • 2016年12月22日 13:50
  • 1361

n个元素进栈,出栈顺序问题

近日在复习数据结构,看到栈的时候,发现1个元素进栈,有1种出栈顺序;2个元素进栈,有2种出栈顺序;3个元素进栈,有5种出栈顺序,那么一个很自然地问题就是n个元素进栈,共有多少种出栈顺序? ...
  • wqiang10
  • wqiang10
  • 2014年11月20日 20:23
  • 1512

入栈出栈序列问题

题目如下: 用n个1和m个0组成字符串,要求任意的前k个字符中,1的个数不能少于0的个数。 问满足要求的字符串数目。     解法: 该题的解法也是看了一些牛人的提示才知道的,也才知道ca...
  • wangtracy123
  • wangtracy123
  • 2015年08月27日 12:00
  • 1054

用JAVA代码实现出栈入栈并获取栈中最小值的程序

【前言】学习Java编程一段时间,对于一些涉及业务逻辑的案例没有太多的机会接触;闲的时候添加了很多群,里面有很多涉及到算法的问题,比较感兴趣(有的时候脑袋还是要练一练的,O(∩_∩)O哈哈~)。 言归...
  • z_programmer
  • z_programmer
  • 2016年12月03日 11:56
  • 3300

n个元素进栈,共有多少种出栈顺序?

来源http://blog.csdn.net/zyearn/article/details/7758716 近日在复习数据结构,看到栈的时候,发现1个元素进栈,有1种出栈...
  • me4weizhen
  • me4weizhen
  • 2016年09月21日 22:36
  • 2186

顺序进栈乱序出栈的所有可能顺序之算法

题目:设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆 列车开出车站的所有可能的顺序。 今天看到这个数据结构练习题,一开始认为只有穷举然后验证的方法。 习题后面给出的...
  • lm19880204
  • lm19880204
  • 2016年07月22日 15:48
  • 2274

两个队列实现栈--出栈,入栈

栈和队列新加入元素的时候总是在最后加入,只不过队列出的时候栈顶,队列出的是队首。所以入栈就是先把元素进入队列1,出栈的时候,先判断队列1有几个元素,如果只有一个元素就直接输出这个元素就好,如果不止1个...
  • a1b2c3d4123456
  • a1b2c3d4123456
  • 2016年06月01日 11:22
  • 558
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cobra —— "下一步"与运行时栈的可视化
举报原因:
原因补充:

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