2011-10-27 7 views
12

मैं पीडीबी चलाने के लिए, कोड के माध्यम से कदम उठाना चाहता हूं, और किसी बिंदु पर किसी नाम से मूल्य को इंगित करता हूं। इसलिए मैं 'स्टेशनलैट' नाम से मूल्य को बदलना चाहूंगा। लेकिन ऐसा लगता है कि मैं नहीं कर सकता। यहां उदाहरण दिया गया है:पीडीबी के साथ पाइथन डीबग करते समय मैं मूल्य कैसे बदलूं?

>>> import extractPercentiles 
>>> import pdb 
>>> pdb.run("extractPercentiles.extractOneStation()") 
> <string>(1)<module>()->None 
(Pdb) s 
--Call-- 
> /scratch/extractPercentiles.py(96)extractOneStation() 
-> def extractOneStation() : 
(Pdb) tbreak 132 
Breakpoint 3 at /scratch/extractPercentiles.py:132 
(Pdb) c 

Deleted breakpoint 3 
> /scratch/extractPercentiles.py(132)extractOneStation() 
-> stationLon = float(stationLoc[3]) 

तो अब मैं ऐसे स्थान पर हूं जहां मैं स्टेशनलाट के मूल्य को बदलना चाहता हूं। Pdb मुझे एक नया मान stationLat स्थापित करने के लिए अनुमति देने के लिए प्रकट होता है, लेकिन जब मैं मूल्य का निरीक्षण किया, यह अपरिवर्तित है:

(Pdb) stationLat 
-34.171100000000003 
(Pdb) stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) !stationLat = -40 
(Pdb) stationLat 
-34.171100000000003 
(Pdb) 

आप देख सकते हैं मैं उपयोग करने की कोशिश! साथ ही, सफलता के बिना।

pdb मैनुअल का कहना है कि मैं चर बदलने के लिए सक्षम होना चाहिए:

आदेश है कि डिबगर को नहीं पहचानता है अजगर बयान माना जाता है और इस कार्यक्रम के संदर्भ में क्रियान्वित कर रहे हैं डिबग जा रहा है। पाइथन स्टेटमेंट्स को विस्मयादिबोधक बिंदु (!) के साथ भी उपसर्ग किया जा सकता है। कार्यक्रम को डीबग किए जाने का निरीक्षण करने का यह एक शक्तिशाली तरीका है; एक परिवर्तनीय को बदलने के लिए भी संभव है या फ़ंक्शन

क्या यह दायरे का सवाल है? क्या मैंने पीडीबी शुरू करने के तरीके से किया है? मैंने एम्बेडेड "pdb.set_trace" idiom की कोशिश की और मुझे एक ही परिणाम मिला।

पढ़ने के लिए धन्यवाद।

उत्तर

9

यह bug in Python 2.6 प्रतीत होता है। आपको पायथन 2.7 में ऐसा करने में सक्षम होना चाहिए।

+0

आह:

इस कोशिश करो! ठीक है धन्यवाद। मैंने सोचा कि शायद मुझे नामों को विचलित करना होगा या कुछ विशेष नामस्थान का उपयोग करना होगा। मैंने फ्रेम स्टैक को ऊपर और नीचे जाने की भी कोशिश की थी। –

+1

ओह, मैं रिकॉर्ड करूंगा कि इस परियोजना के लिए मुझे पाइथन 2.5.2 में वापस काम करने के लिए मजबूर होना पड़ा, जिसमें अभी भी बग है। –

+0

भी, कुछ चर हैं जिन्हें आप असाइन नहीं कर सकते हैं। जैसे "ए" या "बी" – dtc

0

वास्तव में, जब आप पीडीबी में कोई नया मान निर्दिष्ट करते हैं तो चर का मान बदल जाता है। लेकिन यदि आप अपने कोड को चलाने के बिना पीडीबी में चर को पढ़ने की कोशिश करते हैं, तो यह मूल मान पर रीसेट हो सकता है।

यदि आप अपने कोड में वापस कदम रखते हैं, तो आपको यह देखना चाहिए कि यह आपके नए मान (-40) का उपयोग करेगा।

stationLat = -40 
s # step back into code 
stationLat # should display -40 
संबंधित मुद्दे