Mã dưới đây sử dụng các tính năng hướng nội Python để thêm hai lệnh mới vào mô-đun PDB 0 chỉ cần đặt hàm đã cho và cuộc gọi của nó trong mô-đun riêng biệt và nhập mô-đun này trước khi bắt đầu gỡ lỗi - bạn nên có 'disp Các lệnh 'và' undisp 'sẽ thêm và rút lại đồng hồ thành các biến.
Nó hoạt động bằng cách bắt chước mô-đun pdb của Python, được viết bằng python tinh khiết.
# -*- coding: utf-8 -*-
def patch_pdb():
import pdb
def wrap(func):
def new_postcmd(self, *args, **kw):
result = func(self, *args, **kw)
if hasattr(self, "curframe") and self.curframe and hasattr(self, "watch_list"):
for arg in self.watch_list:
try:
print >> self.stdout, "%s: %s"% (arg, self._getval(arg)) + ", ",
except:
pass
self.stdout.write("\n")
return result #func(self, *args, **kw)
return new_postcmd
pdb.Pdb.postcmd = wrap(pdb.Pdb.postcmd)
def do_disp(self, arg):
if not hasattr(self, "watch_list"):
self.watch_list = []
self.watch_list.append(arg)
pdb.Pdb.do_disp = do_disp
def do_undisp(self, arg):
if hasattr(self, "watch_list"):
try:
self.watch_list.remove(arg)
except:
pass
pdb.Pdb.do_undisp = do_undisp
patch_pdb()
if __name__ == "__main__":
# for testing
import pdb; pdb.set_trace()
a = 0
for i in range(10):
print i
a += 2
Rất tiếc, tôi chỉ có thể làm cho nó hiển thị trạng thái của các biến như trước đây khi thực hiện lệnh cuối cùng. (Tôi đã thử một chút, nhưng monkeypatching các mô-đun bdb, đó là cơ sở cho Pdb dường như không hoạt động tốt). Bạn có thể thử và thay đổi các phương thức trong pdb.Pdb, bdb.Bdb hoặc cmd.Cmd được trang trí bởi wrap
để tìm một phương thức được gọi sau khi trạng thái khung đã gỡ rối đã thay đổi.
lẽ IPdb có một số chức năng thay thế – bph
Là một thay thế, nếu bạn thích một giao diện đẹp, bạn có thể muốn sử dụng [ pudb] (https://pypi.python.org/pypi/pudb). –