本身實現一個Python調試器

Python有本身的調試器 pdb, 可是如何本身實現一個簡單的呢。其實並不複雜,調試器的精髓就是把每一步的執行都慢下來。python

簡單的調試器,能夠用很簡單的代碼插入來實現。json

好比,一個python的代碼可能長這個樣子tcp

import os

print os.getcwd()
print 'END'

而後把代碼變成這樣debug

debug_trace()
import os

debug_trace()
print os.getcwd()
debug_trace()
print 'END'

在每一個代碼的前面插入一行代碼,整個代碼的運行就受咱們控制了調試

最終實現出來的解析器是這樣的code

#!/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運行一句,而且會打印出當前行的內容,是否是很簡單呀 :)orm

相關文章
相關標籤/搜索