2009-07-28 18 views
10

में डेल्फी 200 9 में "सीमाओं से बाहर सूची सूची" त्रुटि का स्थान कैसे प्राप्त किया जा सकता है, मेरा प्रोग्राम अब "सीमाओं से बाहर सूची सूची" त्रुटि उत्पन्न करता है।डेल्फी

alt text http://www.beholdgenealogy.com/img/boundserror.gif

मैं विन्यास कि है सब रनटाइम त्रुटि जाँच चालू बनाएँ "डीबग" उपयोग कर रहा हूँ: यह एक पॉपअप बॉक्स उत्पन्न करता है। लेकिन यह होने से पहले त्रुटि को कैप्चर नहीं करता है।

क्या मेरे प्रोग्राम में इस त्रुटि के स्रोत को ब्रेकपॉइंट्स डाले बिना परीक्षण और त्रुटि से कम करने का कोई आसान तरीका है?

+1

एक और +1 ओवरफ्लो, स्टैक करने के लिए एक मंच प्रदान करने के लिए और अन्य विशेषज्ञों जो मदद की मुझे जल्दी से एक समस्या यह है कि मैं आसानी से नहीं होगा पिछले पाने के लिए पर का हल मिल गया मेरी खुद। – lkessler

+1

सहमत हुए। मुझे समझ में नहीं आता कि मेरा अप-वोट केवल इस प्रश्न को शून्य पर क्यों लाता है। अच्छी तरह से कहा, अच्छा स्क्रीन शॉट, और अच्छे जवाब elicited। मैं बस समझ में नहीं आता। – Argalatyr

+3

मुझे लगता है कि अगर मैं अपवॉट चाहता था, तो मुझे कुछ ऐसा कहना चाहिए था: "आपका पसंदीदा डेल्फी कार्टून क्या है"। सौभाग्य से, मैं चाहता था कि मेरी समस्या का समाधान हो। – lkessler

उत्तर

10

क्या आपके पास "डेल्फी अपवादों पर रोकें" चालू है? (उपकरण \ डीबगर विकल्प \ भाषा अपवाद [डेल्फी 7]) अन्यथा यह आपके स्रोत कोड में नहीं टूट जाएगा।

यह भी सुनिश्चित करें कि EListError आपके "अपवाद प्रकार को अनदेखा करने" सूची में नहीं है। यह सूची टूल्स \ डीबगर विकल्प \ भाषा अपवाद (डेल्फी 7) पर भी मिलती है।

+0

यह एक और उत्तर (अलेक्जेंडर के बाद आया) संस्करण के सरल उत्तर के संस्करण के लिए आया था। जब मैं बाद में घर आऊंगा तो मैं इसे देख लूंगा। – lkessler

+1

एसओ के मुताबिक, मैंने एक घंटे पहले जवाब दिया था;) और जब मैंने अपना पोस्ट किया तो मुझे अलेक्जेंडर्स का जवाब नहीं मिला। तो, मैं पहले था: पी –

+0

दिलचस्प। एक समय क्षेत्र की बात होना चाहिए कि एसओ गलत हो जाता है। यह कहता है कि आपने 14 घंटे पहले उत्तर दिया और अलेक्जेंडर ने 13 घंटे पहले उत्तर दिया। लेकिन जब मैं सबसे पहले सबसे पुराना हूं, तो आपका आगे आ जाएगा, इसलिए आप वास्तव में पहले होंगे। – lkessler

0

कोई संकेत देता है कि आपका आवेदन क्या होता है जब ऐसा होता है? एक लंबी लूप? एक बटन क्लिक करें?

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

एक बार जब आप कॉल को संकुचित कर देते हैं, तो CodeSite जैसे लॉगिंग टूल वास्तव में उपयोगी हो सकते हैं। उदाहरण के लिए, मैं अक्सर लूप नियंत्रण चर लॉग करता हूं यह पता लगाने के लिए कि त्रुटि से पहले कौन सा पुनरावृत्ति होता है, तो यह संभावित संदिग्धों की पहचान करने का विषय है।

+0

मुझे पता है कि यह कई टीएलिस्टों में से एक में एक सीमा से बाहर की त्रुटि है कि या तो मेरा प्रोग्राम या मेरे प्रोग्राम में एक घटक उपयोग कर रहा है। मुझे आश्चर्य है कि सीमा-जांच इसे पकड़ नहीं पाती है। एप्लिकेशन रोक नहीं है। ओके बटन दबाए जाने के बाद यह जारी रहता है, लेकिन कुछ कार्यक्षमता गायब होने के साथ। अगर मुझे कॉल मिल सके, तो मुझे पता चलेगा कि त्रुटि कहां है। लेकिन यह उस कॉल को ढूंढ रहा है जो मुश्किल है। – lkessler

+1

बाउंड चेकिंग इसे पकड़ नहीं पाएगी क्योंकि सीमा जांच जांच अंकगणितीय परिचालन (ओवरफ्लो) पर लागू होती है। आपका मतलब सीमा जांच है, लेकिन रेंज जांच * इसे पकड़ नहीं सकता क्योंकि यह केवल कक्षाओं पर नहीं, बल्कि कक्षाओं पर लागू होता है। आप जो त्रुटि संदेश देख रहे हैं वह सूची वर्ग की अपनी "रेंज जांच" का परिणाम है। –

+0

क्या आप एक बटन और संलग्न विधि जोड़ सकते हैं जो आपके प्रत्येक TLists से मूल्य प्रदर्शित करता है? शायद वह जो दिखाता है वह मरने वाला नहीं है? क्या यह इसे कम कर देगा? मैं मानता हूं कि यह अंततः जेसीएल डीबग टूल, मैडएक्ससेप्ट, या यूरेकालोग से परिचित होने के लिए कम काम हो सकता है क्योंकि सही उपकरण को कई उपयोग मिलते हैं ... – Argalatyr

9

madExcept (फ्री) या EurekaLog (भुगतान) मदद कर सकता है। जब कोई त्रुटि होती है तो आप उन्हें स्टैक ट्रेस दिखाने/ईमेल करने के लिए सेट अप कर सकते हैं। मैं अपनी सभी परियोजनाओं में यूरेकालॉग का उपयोग करता हूं और यह इस तरह की चीजों को ठीक करने के लिए अमूल्य है।

+2

एफवाईआई madExcept गैर वाणिज्यिक उपयोग के लिए केवल नि: शुल्क है। –

+0

मुझे लगता है कि इनमें से किसी भी प्रोग्राम (मैंने कभी कोशिश नहीं की है) काम करेगा। लेकिन अगर मैं अपने वितरित पैकेज में उन्नत त्रुटि रिपोर्टिंग नहीं जोड़ना चाहता हूं तो वे थोड़ा अधिक हैं। मैं उनमें से एक के साथ जा सकता हूं (किसी भी सिफारिश के लिए जो बेहतर है?), लेकिन मैं वास्तव में एक सरल समाधान की उम्मीद कर रहा था। – lkessler

+3

जेसीएल की एक समान पेशकश है और वास्तव में मुफ़्त है। –

3

चूंकि यह एक आरटीएल/वीसीएल त्रुटि है, तो आप डीबग डीसीयू (और पुनर्निर्माण) को सक्षम करते हैं तो आप अक्सर बेहतर ब्रेकिंग/कॉलस्टैक व्यवहार के साथ समाप्त होते हैं।

+0

इसे आजमाने की आवश्यकता नहीं है (ऊपर समाधान देखें), लेकिन विचार के लिए धन्यवाद। – lkessler

7

अरे, आपको इसे ट्रैक करने के लिए किसी भी अतिरिक्त टूल की आवश्यकता नहीं है! :)

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

जब अपवाद होता है - डीबगर से एक अधिसूचना होगी। "ठीक"/"डीबग" बटन दबाएं और केवल कॉल स्टैक देखें। कॉल स्टैक विंडो हाल ही में डेल्फी के संस्करण में दिखाया गया है। यदि आप इसे नहीं देख पा रहे हैं - "देखें"/"डीबग विंडोज"/"कॉल स्टैक" पर जाएं।

यह सब कुछ है। The call stack will point you at the exact location of the problem। कोई अतिरिक्त उपकरण की आवश्यकता नहीं है।

यदि आप उपयोगकर्ताओं के बीच अपना प्रोग्राम वितरित करते हैं और क्लाइंट साइड पर समस्याओं के बारे में बग-रिपोर्ट इकट्ठा करना चाहते हैं तो उन टूल (यूरेकालॉग, जेसीएल या मैडएक्ससेप्ट) की आवश्यकता होती है। अर्थात। समस्या की जांच करने के लिए कोई डीबगर नहीं है।

+1

मैं कैप्शन में एक अजीब गैर-मानक शब्द भी देखता हूं: "देखें";) – Alex

+0

उम्मीद है कि, "देखें" जल्द ही एक मानक होगा। :-) – lkessler

+0

यह उस साधारण उत्तर का एक संस्करण है जिसे मैं ढूंढ रहा था। जब मैं बाद में घर आऊंगा तो मैं इसे देख लूंगा। – lkessler

0

सूची बॉक्स, tstrings, ... का मतलब है कि सूचकांक सूची से परे है-> गिनती। । tString-> strnigs [?] का उदाहरण; [?] < 0 या> (tString-> count-1) सीमाओं त्रुटि से बाहर हो जाएगा।

एनएमपीओपी 3, आदि के लिए ... यदि ईमेल लाने के लिए pop3client का उपयोग करते हैं, तो इसमें कुछ यूनिक्स/के लिए एक बग है? पॉप 3 सर्वर, कि मैं मेल.???.com से ईमेल लाने के लिए इसका उपयोग कर चुका हूं लेकिन कुछ के साथ ठीक है।

आखिरकार मुझे अपने पॉप 3 क्लाइंट एप्लिकेशन को tnmpop3 के बजाय tclientsocket के साथ फिर से लिखना होगा। अब मेरे द्वारा कनेक्ट किए गए प्रत्येक पॉप 3 सर्वर के साथ काम करता है।

आशा है कि यह मदद & सौभाग्य