2010-10-13 12 views
5

तोड़ने यह एक डेल्फी बग होना चाहिए इकाई में परिभाषित किया गया ...जेनेरिक डिबग जानकारी

मैं एक इकाई है जो मेरी दृढ़ता ढांचे के आधार है। उस इकाई में मेरे पास मेरे सभी डोमेन ऑब्जेक्ट्स, एक लिस्ट क्लास और जेनेरिक लिस्ट क्लास के लिए बेस क्लास है।

हाल ही में मैंने देखा है कि जब मैं डीबगिंग करते समय इकाई में कदम रखता हूं, तो निष्पादन फ़ाइल में थोड़ा और नीचे एक बिंदु पर कूद जाएगा ... शायद चार या पांच लाइनें। फ़ाइल को पुन: ऑर्डर करने से कोई फर्क नहीं पड़ता। कोड पहुंच उल्लंघन भी उत्पन्न करेगा, लेकिन केवल तभी जब मैंने इसे डीबग किया था।

मैंने इसके कारण खोजने का प्रयास करने के बारे में बताया ... कई चीजें ध्यान में आईं, जैसे कुछ कोड इंजेक्शन डीबगर (जैसे this logitec webcam driver bug) के साथ खराब हो रहा है, या डीबग जानकारी मेरे यूनिट स्रोत (जैसे उदाहरण के साथ सिंक हो रही है) डीसीयू को कुछ पुराने स्रोत से खींचा जा रहा था)।

अंत में मैंने एक स्वच्छ विंडोज + डेल्फी इंस्टॉलेशन के साथ एक वीएम निकाल दिया, केवल यूनिट का परीक्षण करने के लिए मुझे जो कुछ चाहिए, उसे पकड़ लिया, और मैंने इसका परीक्षण करने के लिए एक छोटी डुनिट परियोजना बनाई। एक ही समस्या है।

तब मैंने यूनिट से चीजों को एक बार काम करने तक काम करना शुरू कर दिया। जब मैंने जेनेरिक लिस्ट क्लास को हटा दिया तो एकमात्र चीज जिसने कोई फर्क नहीं पड़ता था।

क्या किसी और ने इस समस्या को देखा है? क्या किसी को पता है कि इसके आसपास कैसे जाना है?

अग्रिम धन्यवाद,

एन @

अद्यतन: सामान्य इकाई में वापस जोड़ा जा रहा है पर समस्या वापस आ बनाता है, तो यह बासी DCUs की एक समस्या नहीं है।

+0

नेटली, मैं एक ही समस्या है जो वास्तव में कष्टप्रद है, क्योंकि मैं एक पूरी सामान्य सूचियों के आधार पर परियोजना होता है। जब मैंने डीबग शुरू किया - आश्चर्य! - डेल्फी आईडीई दुर्घटनाग्रस्त हो गया। मैंने आपके प्रश्न के लिए एक बक्षीस शुरू किया। यदि आपने इस डेल्फी बग के लिए कोई कामकाज स्थापित किया है, तो कृपया यहां लिखें। – Andrew

+0

@ एंड्रयू मैंने केवल जेनरिक के साथ दूसरी इकाई बनाने का अंत किया। मैं इसे बेहतर ढंग से समझाने के लिए अपना उत्तर अपडेट करूंगा ... – Nat

+0

एक्सप्लानेशन के लिए बहुत बहुत धन्यवाद! यह भी मेरे लिए काम किया। ये +200 अंक आपकी हैं, आपने मेरा सिरदर्द ठीक कर लिया है :) – Andrew

उत्तर

2

अंत में, केवल समाधान है कि मैं मिल सकता है कि काम यूनिट से बाहर सामान्य सूची ले जाने के लिए किया गया था।

मैं अपने सामान्य सूची आधार वर्ग मेरी आधार TDomainObject वर्ग और एक गैर जेनेरिक वर्जन के साथ मेरी Domain इकाई में परिभाषित किया गया था:

अद्यतन 2011-08-03 बेहतर मेरी समाधान बाहर मांस के।

समस्या को ठीक करने के लिए, मैंने जेनेरिक को दूसरी Domain.Generics इकाई में स्थानांतरित कर दिया जिसने मेरे लिए समस्या का समाधान किया।

तो:

unit Domain; 

interface 

type 
    TDomainObject = class 
    //blah de blah 
    end; 

    TDomainObjectList = class (TDomainObject) 
    //more stuff 
    end; 

    TDomainListEnumerator = class 
    //etc 
    end; 

और:

unit Domain.Generics; 

interface 

type 

    TDomainObjectList<T: TDomainObject> = class (TDomainObjectList) 
    //stuff 
    public 
    property Items[AIndex: integer]: T read GetItem write SetItem; 

    type 
     TEnumerator = class (TDomainListEnumerator) 
     public 
     function GetCurrent: T; 
     property Current: T read GetCurrent; 
     end; 

    public 
    function GetEnumerator: TEnumerator; 

    end; 
+0

लेटर दिन अपडेट; डेल्फी 2010 में भी मुझे वही समस्याएं थीं, लेकिन डेल्फी एक्सई में इकाइयों में जेनेरिक संग्रह का उपयोग करके और उनके साथ डिबगिंग करने में कोई समस्या नहीं है। यदि आप एक्सई में चले गए हैं, तो यह उत्सुक होगा यदि यह अभी भी आपको प्रभावित करता है। –

+0

@WarrenP मैं अभी तक नहीं बढ़ गया है, मेरे लिए XE में पर्याप्त नहीं है ... कमोडोर में 64 बिट समर्थन की प्रतीक्षा कर रहा है। जब मैं अंततः अपग्रेड करता हूं तो मैं इसे फिर से कोशिश करूंगा और मैं इस पोस्ट को अपडेट करूंगा। :) – Nat

2

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

+0

यदि ऐसा है, तो इकाई से जेनेरिक को कैसे हटाया जा सकता है समस्या को हल कर दिया है? – Nat

+0

मैंने अब किया है जैसा आपने सुझाव दिया है, और कोई बदलाव नहीं है। यदि जेनेरिक फ़ाइल में है, तो डीबग जानकारी टूट जाती है, अगर यह खत्म हो जाती है, तो डीबग जानकारी ठीक है। आपके सुझाव के लिए धन्यवाद, बीटीडब्ल्यू। – Nat

0

अक्सर यह आंतरिक/बाहरी संकलन स्थिति सिंक से बाहर हो रही है।

पहला चरण अपनी परियोजना के लिए .dcu फ़ाइलों से छुटकारा पाने के लिए है, फिर डेल्फी को पुनरारंभ करें, फिर पूर्ण निर्माण करें। यदि समस्या बनी रहती है, तो Nick's answer देखें।

--jeroen

+0

मैंने ऐसा किया, इसलिए मैंने क्लीन डेल्फी के साथ एक क्लीन मशीन पर कोड की जांच की ... कोई भी डीसीयू मशीन पर नहीं था। यूनिट से बिट्स को हटाने के बाद, और कई संकलन चक्रों में यह केवल _after_ समस्या को ठीक करने वाले जेनेरिक को हटा रहा था ... वास्तव में, इसे इकाई में वापस डालने से समस्या फिर से हो गई। – Nat

+0

यदि यह एक साधारण इकाई है, तो इसे प्रश्न में रखें। मैं इसे डेल्फी 2010 और डेल्फी एक्सई दोनों के साथ पुन: उत्पन्न करने की कोशिश करूंगा। –

+0

मैं इसे एक छोटे से उदाहरण में जोड़ दूंगा और फिर इसे पोस्ट करूंगा ... लेकिन इसे सोमवार (मेलबर्न समय) तक इंतजार करना होगा। अब तक आपकी सलाह के लिए धन्यवाद। – Nat

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