कोड bellow अजगर आत्मनिरीक्षण सुविधाओं का उपयोग करता डिबगिंग शुरू करने से पहले इस मॉड्यूल PDB मॉड्यूल के लिए दो नए आदेश जोड़ने 0 सिर्फ दिए गए समारोह, और एक अलग मॉड्यूल में अपने कॉल रखा, और आयात करने के लिए - आप 'disp होना चाहिए 'और' undisp 'कमांड चर के लिए घड़ियों को जोड़ और वापस लेते हैं।
यह पाइथन के पीडीबी मॉड्यूल को बंदरपैचिंग द्वारा काम करता है, जो शुद्ध पायथन में लिखा गया है।
# -*- 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
दुर्भाग्य से मैं केवल यह चर की स्थिति प्रदर्शित के रूप में वे पिछले आदेश के निष्पादन के लिए पहले से कहां से कर सकता है। (मैंने थोड़ा सा प्रयास किया, लेकिन बीडीबी मॉड्यूल को बंद कर दिया, जो कि पीडीबी का आधार भी काम नहीं कर रहा था)। आप किसी भी pdb.pdb, bdb.bdb या cmd.Cmd में विधियों को आजमा सकते हैं और बदल सकते हैं जिन्हें wrap
द्वारा सजाया गया है जिसे डिबग किए गए फ्रेम स्थिति के बाद बुलाया गया है।
शायद ipdb, कुछ वैकल्पिक कार्यक्षमता – bph
एक विकल्प के रूप है अगर आप एक अच्छा यूआई चाहें, तो आप उपयोग कर सकते हैं [ pudb] (https://pypi.python.org/pypi/pudb)। –