2012-08-12 15 views
8

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

  1. क्या इस त्रुटि के लिए कुछ अन्य संभावित कारण हैं जो अनुपूरक विधि को कॉल करने का प्रयास कर रहे हैं?
  2. क्या कुछ संभावना है कि फास्टएमएम ने एप्लिकेशन में कुछ अस्पष्ट बग को सक्षम किया है, जो अभी तक छिपा हुआ है?

यदि इन सवालों का जवाब नहीं है, तो मैं अभी एक अनुपूरक विधि कॉल खोजना जारी रखूंगा, मुझे राहत मिली है कि मुझे कुछ और याद नहीं है।

+1

मैं अनुभव किया है "सार त्रुटि" जब एक फार्म बनाया गया था, आमतौर पर यह होता है जब आप एक फार्म (Form1) बनाते हैं, तो, घटक जोड़ने, आदि और फिर एक और रूप (Form2) कि Form1 विरासत में बनाते हैं, तो सब कुछ को बचाने के सभी अच्छे अब तक, अब, आप Form1 को संशोधित करता है, तो (घटक जोड़ने, घटक संपत्ति को संशोधित ...) बचाने के लिए और फिर से बनाना, जब Form2 बनाई गई है -> bam, डिजाइन में सार त्रुटि, तब से, मैं हमेशा से बचा लिया है प्रपत्र विरासत। – ComputerSaysNo

उत्तर

11

यदि स्मृति भ्रष्टाचार है तो सभी प्रकार की त्रुटियों को उठाया जा सकता है और कारण ढूंढना बहुत मुश्किल है।

अपने प्रश्नों के उत्तर देने के लिए: 1) हाँ अमूर्त त्रुटि स्मृति भ्रष्टाचार के कारण भी हो सकती है, और 2) हां फास्टएमएम सक्षम करने से बग दिखाई दे सकते हैं जो आम तौर पर अनजान हो जाते हैं (लेकिन अभी भी तय किया जाना चाहिए)।

स्मृति त्रुटियों को ढूँढने के लिए कुछ सामान्य सलाह:

  1. कोशिश "FullDebugMode" FastMM में स्थापित कर लिया।
  2. सुनिश्चित करें कि आपके द्वारा बनाई गई सभी चीज़ों को निःशुल्क से मिलान किया गया है।
  3. सुनिश्चित करें कि एक से अधिक बार मुक्त नहीं किया गया है।
  4. यकीन है कि एक वस्तु (या इसे बनाया गया है से पहले) के बाद यह मुक्त किया जा चुका है नहीं किया जाता है सुनिश्चित करें।
  5. संकेतों और चेतावनियों को चालू करें (और जब वे होते हैं तो उन्हें ठीक करें)।
+3

+1। मैं '5 जोड़ूंगा। संकेत और चेतावनियां चालू करें (और उन्हें होने पर ठीक करें) ' –

+0

@ केनहाइट: बिल्कुल। और मैं वह '1 बना दूंगा। संकेत और चेतावनी चालू करें ... ',' 1.' :-) –

+2

@KenWhite जोड़ा गया पर जोर :-) केवल समस्या यह है कि विरासत कोड में वहाँ चेतावनी के सैकड़ों और उन्हें फिक्सिंग (गलत) जोखिम नए बग प्रस्तुत हो सकता है। तो यह सावधानी से किया जाना चाहिए। –

3

"यह सिर्फ तोड़ दिया" - यह शायद हमेशा तोड़ दिया गया था, लेकिन अब आप जानते हैं।

बटन बटन के हिस्से के रूप में फ़ॉर्म को बंद करते समय मैंने समस्याएं देखी हैं। फॉर्म नष्ट हो जाता है और फिर शेष बटन संदेशों को अब तक मौजूद मौजूदा बटन पर भेज दिया जाता है। रिलीज विधि इसे (स्मृति से) से wm_close संदेश को

+0

आपका जवाब पर ध्यान केन्द्रित करेगा सिर्फ मुझे मदद की। मेरे पास एक बटन था जो खुद को हटा दिया और नए बटन जोड़े। ट्रिक बटन कोड निकास के बाद पुनः लोड करने के लिए एक सेमफोर सेट करना था। – CharlesW

1

पर पोस्ट करने से बचाती है आप अपनी परियोजना में u_dzAbstractHandler जोड़ने का प्रयास कर सकते हैं। यह सार त्रुटि जहां विधि बुलाया गया था उठाना चाहिए, ताकि इसे डिबग करने के लिए आसान है। बेशक यह केवल मदद करता है जब त्रुटि तब होती है जब डीबगर में चल रहा है।

http://sourceforge.net/p/dzlib/code/145/tree/dzlib/trunk/src/u_dzAbstractHandler.pas

2

उत्तर 1 सवाल करने के लिए:

हां।

TWinControl(Sender).Visible:= FALSE;   

यह काम किया जब इस एक TButton था, लेकिन (बेशक) त्रुटि मिली जब इस एक TAction था: यह क्या मेरे मामले में की वजह से एक सार त्रुटि है।

उत्तर 2 पर सवाल उठाने: हाँ। मैंने देखा है कि यह भी हो रहा है।हमें बहुत स्पष्ट होना चाहिए कि इसका मतलब यह नहीं है कि फास्टएमएम छोटी है। बग 'निष्क्रिय' था। फास्टएमएम ने केवल इसे ट्रिगर किया।
असल में आपको अपनी समस्या को खोजने के लिए फास्टएमएम पर भी भरोसा करना चाहिए। इसके लिए फास्टएमएम को पूर्ण डीबग मोड पर स्विच करें। यह आपकी मदद करेगा:

Make sure an object is not used after it has been freed (or before it has been created)

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

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

  • कोई संबंधित समस्या नहीं^_^