में एक चर कैसे देखते हैं मैं एक पायथन लिपि डिबग कर रहा हूं, और मैं एक बदलाव के लिए एक चर देखना चाहता हूं (जैसा कि आप जीडीबी में मेमोरी एड्रेस देख सकते हैं)। क्या इसे करने का कोई तरीका है?आप पीडीबी
उत्तर
pdb
के साथ ऐसा करने के लिए वास्तव में एक हैकी तरीका है। हर बार जब आप pdb
का उपयोग करते हैं तो स्वचालित रूप से लोड होने के लिए इन आदेशों को आपके ~/.pdbrc
में रखा जा सकता है।
!global __currentframe, __stack; from inspect import currentframe as __currentframe, stack as __stack
!global __copy; from copy import copy as __copy
!global __Pdb; from pdb import Pdb as __Pdb
!global __pdb; __pdb = [__framerec[0].f_locals.get("pdb") or __framerec[0].f_locals.get("self") for __framerec in __stack() if (__framerec[0].f_locals.get("pdb") or __framerec[0].f_locals.get("self")).__class__ == __Pdb][-1]
alias _setup_watchpoint !global __key, __dict, __val; __key = '%1'; __dict = __currentframe().f_locals if __currentframe().f_locals.has_key(__key) else __currentframe().f_globals; __val = __copy(%1)
alias _nextwatch_internal next;; !if __dict[__key] == __val: __pdb.cmdqueue.append("_nextwatch_internal %1")
alias _stepwatch_internal step;; !if __dict[__key] == __val: __pdb.cmdqueue.append("_stepwatch_internal %1")
alias nextwatch __pdb.cmdqueue.extend(["_setup_watchpoint %1", "_nextwatch_internal"])
alias stepwatch __pdb.cmdqueue.extend(["_setup_watchpoint %1", "_stepwatch_internal"])
यह दो आदेश, nextwatch
और stepwatch
जो प्रत्येक एक चर नाम लेते हैं एक तर्क के रूप VARNAME कहते हैं। यदि संभव हो तो वे varname के लिए मौजूदा फ्रेम के स्थानीय चर की एक उथली प्रतिलिपि बना देंगे, और next
या step
निष्पादित करते रहें, जब तक कि नाम बदलना न पड़े।
यह सीपीथॉन 2.7.2 में काम करता है लेकिन कुछ pdb
आंतरिक पर निर्भर करता है, इसलिए यह शायद कहीं और तोड़ देगा।
मैंने मैक्रोज़ को मेरी ~/.pdbrc फ़ाइल में कॉपी किया। हालांकि पीडीबी मुझे बताता है: NameError 'nextwatch' undefiened है। मैं इसे इस तरह गिरता हूं: "अगलीवॉच '(var) –
मैं अजगर 3.5, मैक का उपयोग कर रहा हूं, और ऐसा लगता है कि' .pdbrc' काम नहीं कर रहा है। यहां तक कि जब मैं उपरोक्त कोड को '(पीडीबी) में बदलता हूं:' पर्यावरण, जब मैं 'स्टेपवॉच' या 'अगलीवॉच' चलाएं, यह कहता है कि '__dict' और अन्य परिभाषित नहीं हैं। क्या आप पाइथन 3.5 के लिए अपना कोड अपडेट कर सकते हैं? धन्यवाद – Daniel
जैसा कि बताया गया है, यह शायद पाइथन के कुछ अन्य संस्करणों में काम नहीं करेगा। आपका स्वागत है एक नया उत्तर के रूप में एक पायथन 3.5 संस्करण पोस्ट करने के लिए। –
जब आप ब्रेकपॉइंट पर मार रहे हैं तो एक चर देखने के लिए, आप commands
कमांड का उपयोग कर सकते हैं। जैसे ब्रेकपॉइंट # 1 (canonical example from pdb
doc) मारते समय some_variable
प्रिंटिंग।
(Pdb) commands 1
(com) print some_variable
(com) end
(Pdb)
यह शीर्ष उत्तर होना चाहिए। आसान, सीधा, आपको पीडीबी की एक साफ सुविधा सिखाता है - ब्रेकपॉइंट कमांड। –
हालांकि यह उपयोगी हो सकता है, यह सीधे सवाल का जवाब नहीं देता है , जो चरों में परिवर्तनों के लिए देखना चाहता है, और फिर उन परिवर्तनों को तोड़ना, न केवल प्रीसेट ब्रेकपॉइंट्स पर एक चर की स्थिति को देखें। – kmantel
के लिए अजगर 3:
आप pdb
की display कार्यक्षमता का उपयोग एक बार जब आप ब्रेकप्वाइंट हिट कर सकते हैं बस टाइप
ipdb>प्रदर्शनअभिव्यक्ति
उदाहरण:
ipdb> display instance
display instance: <AppUser: dmitry4>
ipdb> display instance.id
display instance.id: 9
ipdb> display instance.university
display instance.university: <University: @domain.com>
ipdb> display
Currently displaying:
instance.university: <University: @domain.com>
instance.id: 9
instance: <AppUser: dmitry4>
ipdb>
के रूप में आप देख सकते हैं, हर बार जब आप प्रदर्शन प्रकार - यह आपकी घड़ियों (भाव) के सभी प्रिंट होगा। आप कुछ घड़ी को हटाने के लिए अंडरप्ले फ़ंक्शन का उपयोग कर सकते हैं।
तुम भी पीपी अभिव्यक्ति अभिव्यक्ति (बहुत उपयोगी)
सम्भावित समाधान का उपयोग है prettyprint का उपयोग कर सकते pdb++:
pip install pdbpp
फिर
"निशान" वस्तु आप के साथ देखना चाहते हैं डेकोरेटर @pdb.break_on_setattr
:
from pdb import break_on_setattr
@break_on_setattr('bar')
class Foo(object):
pass
f = Foo()
f.bar = 42 # the program breaks here
यहाँ pdb
Wil किसी भी फू-ऑब्जेक्ट पर bar
विशेषता के किसी भी बदलाव पर एल ब्रेक करें।
चेतावनियां
केवल अंतर्निहित __setattr__
-method का आमंत्रण ब्रेकप्वाइंट ट्रिगर किया जाएगा।इसका मतलब है कि f.bar = 'XYZ'
और setattr(f, 'XYZ')
काम करेंगे, लेकिन bar
-object जोड़ तोड़ ब्रेकप्वाइंट ट्रिगर नहीं करेगा:
f.bar = []
f.bar.append(7) # will NOT trigger breakpoint
f.bar = 2
f.bar += 5 # will trigger breakpoint
नोट: @break_on_setattr
मानक pdb
मॉड्यूल का हिस्सा नहीं है। pdb
pdbpp
-package द्वारा ओवरराइड/बंदर-पैच किया गया है।
- 1. पीडीबी
- 2. पीडीबी
- 3. पीडीबी फ़ाइल
- 4. आप पीडीबी (पायथन) में स्क्रिप्ट तर्क कैसे पारित करते हैं?
- 5. मैं प्रतीकों फ़ाइल (पीडीबी)
- 6. विंडबग: निजी पीडीबी प्रतीकों
- 7. पीडीबी के जीसीसी समकक्ष
- 8. PDB.run - एक पीडीबी सत्र
- 9. पायथन पीडीबी - स्किप लूप
- 10. पीडीबी फ़ाइल क्या है?
- 11. पायथन डीबगर (पीडीबी)
- 12. "सिंटेक्स त्रुटि: पीडीबी
- 13. पीडीबी फाइलें cmake इंस्टॉल
- 14. पीडीबी फ़ाइल बनाने में असमर्थ
- 15. पायथन पीडीबी (डीबगर) disp बराबर?
- 16. मैं पीडीबी फाइलों का उपयोग कैसे करूं
- 17. आईपीथॉन डीबगर: इंटरैक्टिव पीडीबी पर पूर्ण ट्रेसबैक?
- 18. आप पाइथन के डीबगर (पीडीबी) में एक सूची समझ को कैसे छोड़ते हैं?
- 19. पीडीबी छवि से मेल नहीं खाता त्रुटि
- 20. वास्तव में पीडीबी फाइलें क्या करती हैं?
- 21. पायथन डीबगर के साथ प्रारंभ करना, पीडीबी
- 22. पीडीबी फाइलों का उद्देश्य क्या है?
- 23. .NET DLL फ़ाइल से पीडीबी उत्पन्न करें?
- 24. विजुअलस्टूडियो बिन \ डीबग फ़ोल्डर्स में पीडीबी फाइलें
- 25. पीडीबी ब्रेकपॉइंट पर नहीं रुक जाएगा
- 26. पीडीबी में पाइथन प्रोग्राम चलाने में बाधा डालें (रोकें)?
- 27. मैं पाइथन पीडीबी में वर्तमान लाइन कैसे सूचीबद्ध करूं?
- 28. .NET पीडीबी फ़ाइलों का प्रारूप (स्कीमा) क्या है?
- 29. पीडीबी (प्रोग्राम डीबग डेटाबेस) का उपयोग क्या है?
- 30. मेरे प्रतीक (पीडीबी) स्थानीय पथ से क्यों नहीं लोड होंगे?
आप इसे [pudb] (https://pypi.python.org/pypi/pudb) में कर सकते हैं –
@WayneWerner देखभाल को दिखाने या दस्तावेज़ों से जोड़ने का उत्तर जोड़ने के लिए? मैं स्पष्ट रूप से खोज रहा हूं कि इसे 'पुडब' में कैसे किया जाए लेकिन खाली हो रहा है ... –
@ जेफविडमैन यह एक और सवाल होगा - मुझे यह पूछने पर बताएं :) –