Python有自己的调试器 pdb, 但是如何自己实现一个简单的呢。其实并不复杂,调试器的精髓就是把每一步的执行都慢下来。
简单的调试器,可以用很简单的代码插入来实现。
比如,一个python的代码可能长这个样子
import os
print os.getcwd()
print 'END'
然后把代码变成这样
debug_trace()
import os
debug_trace()
print os.getcwd()
debug_trace()
print 'END'
在每个代码的前面插入一行代码,整个代码的运行就受我们控制了
最终实现出来的解析器是这样的
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import time
def interpreter(*args):
print 'I:', args
time.sleep(0.5)
lineno = 0
code = ''
for line in open('simple-tcp-proxy.py'):
lineno += 1
contain_code = False
if line.strip() and not line.strip().startswith('#'):
contain_code = True
if contain_code:
code += 'interpreter({}, {})\n'.format(lineno, json.dumps(line.strip()))
code += line
exec(code, {'interpreter': interpreter})
效果就是代码的速度变成了每 0.5s运行一句,并且会打印出当前行的内容,是不是很简单呀 :)