1
fqrouter2 2013-11-03 02:25:15 +08:00 via Android
stackless python
greenlet pypy |
3
unionx 2013-11-03 02:39:21 +08:00
systemtap or dtrace
|
4
bombless 2013-11-03 06:30:08 +08:00
有一种做法是做语法分析,在需要的地方插入桩,然后运行这个结果来得到近似的效果
|
5
ruoyu0088 2013-11-03 06:48:19 +08:00 1
排序函数是你自己写的吧,你在每条语句之后插入获取所有局部变量的locals()调用,并保存这条语句的行号和文本,当然这个过程可以用一个程序自动化。
执行一遍程序之后,你就有单步执行的所有信息了,然后对这些信息可视化就可以了。不需要真正地单步执行程序。 |
6
fay 2013-11-03 07:34:06 +08:00
可以配合使用yield和send、next函数,send函数的返回值可以是locals()调用的结果,即中间变量。
|
7
9hills 2013-11-03 08:36:49 +08:00 3
lz要的是不是这个效果:(可能需要爬墙)
http://www.pythontutor.com/ Open Source:https://github.com/pgbovine/OnlinePythonTutor/ |
8
tioover 2013-11-03 12:49:29 +08:00
排序算法要可视化呈现,那么做一个类似List 的结构,在这个class 里面做手脚,比如说Insert 就是插入并且更新画面并且暂停。
|
9
Hualin OP @9hills 他们用的技术是 bdb,看起来就是个现成的实现,可以结合 local 打印出来中间结果的log。正在看
谢谢 |
10
Hualin OP @ruoyu0088 请问你所说的 "自动执行"是什么意思?是不是不用每句后面都加 local()?有种方法就让它单步推出 local?
我刚看完 Online Python Tutor, 里面的实现对我的作业来说有点 overkill。我想简化一下它的后端,也就是它的 debugger (继承自 bdb)。 但是自己实现一个简易的 debugger 来记录单步信息貌似还是比较难。而且我这核心程序是排序算法,有些 N^2 的算法的单步步奏太多,如果按照 前面我提到的那个 project 的做法全部把 单步信息存到 json 里,会很没效率。我想把重要的我选择的单步信息推送到 numpy (一个 python 数学库,对大型 array 的处理很快),然后在到前端做单步可视化。 |
11
mengzhuo 2013-11-04 09:59:26 +08:00
import ipdb;ipdb.set_trace()
一次拥有,终生不忘 |
12
ruoyu0088 2013-11-04 16:04:12 +08:00
@Hualin,是直接修改演示程序的源代码,在每句话之后添加保存local()的语句。我觉得你既然为了演示,N不会太大吧。
|