2012-10-14 8 views
6

डेल्फी में डिबगिंग करते समय, एक अपवाद सही ढंग से मुझे गलती के कारण कोड की रेखा बताएगा, लेकिन मुझे किसी भी स्थानीय चर तक पहुंच नहीं मिल सकती है। क्या यह डीबगर में एक सीमा है? या क्या मुझे कुछ आसान याद आ रही है? वर्तमान में, मुझे गलती से पहले लाइन पर वैश्विक स्तर पर सभी स्थानीय चरों को दर्पण करना होगा, कार्यक्रम को दोबारा जोड़ना होगा और आशा है कि उसी अपवाद को दोहराने में सक्षम होना चाहिए।डेल्फी अपवाद मुझे स्थानीय चर देखने की अनुमति नहीं दे रहे हैं

उदाहरण के लिए

MyArray[I]:=Foo(...); 

हैं I (सीमा चालू जाँच के साथ) सीमा से बाहर है, मैं नहीं देख सकता कि चर I है, जब तक कि मैं पिछले लाइन पर एक विश्व स्तर पर scoped डिबग चर को यह नजर आता ।

या अगर मैं

MyInteger:=Trunc(MyFloat), 

और MyFloat6.1E+17 है, मुझे नहीं पता क्या यह मूल्य है की है।

+0

यह डीबगर का ज्ञात सीमा है। आप इतना कुछ नहीं कर सकते हैं। –

+0

मैं यहां नया हूं (पहली पोस्ट)। मुझे "प्रश्न का उत्तर" नहीं मिल रहा है, फिर भी मैंने दूसरे को देखा है "प्रश्न का उत्तर चिह्नित करना याद रखें।" मैं उसको कैसे करू? –

+4

जैसा कि मुझे याद है, जब मुझे इस सीमा का सामना करना पड़ा, रॉबर्ट, मैंने स्पष्ट रूप से समस्या के कारण लाइन पर एक ब्रेकपॉइंट सेट किया है (समस्या को पुन: उत्पन्न करने योग्य है) ताकि मैं अपवाद से पहले स्थानीय चरों तक पहुंच प्राप्त कर सकूं। या, मैंने स्थानीय कोड को एक कोशिश के साथ घेर लिया है ... सिवाय इसके कि ब्लॉक को छोड़कर एक रेखा डालें और जिस पर मैं ब्रेक पॉइंट सेट कर सकता हूं। – RobertFrank

उत्तर

7

जब आप कॉल स्टैक विंडो में उचित रेखा का चयन करते हैं तो आप स्थानीय चर के मान देख सकते हैं। अपवाद उठाए जाने से पहले आमतौर पर यह एक या दो पंक्तियां होती है।

मेरे पास लागू होने पर सटीक संस्करण नहीं है, लेकिन यह निश्चित रूप से नए संस्करणों में से एक है।

+2

मैं पुष्टि कर सकता हूं कि डी 7 नहीं कर सकता है, लेकिन डी 2007 स्थानीय चर विंडो में मान दिखा सकता है (हालांकि घड़ियों खिड़की में नहीं) जब कॉल स्टैक में उपयुक्त लाइन पर डबल क्लिक किया जाता है। –

+0

मैंने XE3 में यह काम सत्यापित किया। मैं नहीं जानता कि स्टैक ट्रेस में प्रत्येक प्रक्रिया या फ़ंक्शन के लिए दो स्टैक क्यों हैं, लेकिन दोनों में से एक जंगली गलत परिणाम देता है, लेकिन दूसरा सही परिणाम देता है। मैंने अभी तक किसी भी वास्तविक डीबगिंग की कोशिश नहीं की है (केवल जानबूझकर अपवाद), लेकिन मुझे लगता है कि 99% समय लगता है, यह स्पष्ट होगा कि कौन सा सही है। –

1

"समस्या" संकलक द्वारा जहां तक ​​मुझे पता है, के कारण होता है। कंपाइलर की अनुकूलन सुविधा एक कचरा कलेक्टर की तरह कार्य करती है, यह किसी फ़ंक्शन के भीतर घोषित चर को मुक्त करती है जब अब और उपयोग नहीं किया जाता है।

समस्या से निपटने के लिए, अपवाद हैंडलर लिखें और अपवाद पकड़ ब्लॉक के भीतर चर का नकली उपयोग करें।

संबंधित मुद्दे