2010-03-31 20 views
7

मैं फास्टएमएम 4.9 2 और जेडीआई जेवीसीएल 3.0 के साथ विंडोज एक्सपी पर डेल्फी प्रो 6 का उपयोग कर रहा हूं। नीचे दिए गए कोड को देखते हुए, मुझे निम्न समस्या आ रही है: केवल पहला अपवाद हैंडलिंग ब्लॉक ई का वैध उदाहरण प्राप्त करता है। अन्य ब्लॉक अपवाद के वर्ग के साथ ठीक से मेल खाते हैं, लेकिन ई असाइन किया गया है (शून्य)।कई अपवाद हैंडलिंग ब्लॉक के साथ डेल्फी अपवाद हैंडलिंग समस्या

उदाहरण के लिए, जब मैं ई 1 मैचों और ई के लिए ब्लॉक बढ़ाता हूं तो अपवाद हैंडलिंग ब्लॉक का वर्तमान क्रम दिया गया है और ई वैध ऑब्जेक्ट उदाहरण है। हालांकि, अगर मैं ई 2 बढ़ाने की कोशिश करता हूं, तो वह ब्लॉक मेल खाता है, लेकिन ई असाइन नहीं किया गया है (शून्य)। अगर मैं ऑर्डरिंग के शीर्ष पर ई 2 कैचिंग ब्लॉक ले जाता हूं और ई 1 बढ़ाता हूं, तो जब ई 1 ब्लॉक ई से मेल खाता है तो अब असाइन नहीं किया गया है। इस नए ऑर्डरिंग के साथ यदि मैं ई 2 बढ़ाता हूं, तो ई ठीक से असाइन किया जाता है जब ऐसा नहीं होता था जब ई 2 ब्लॉक ऑर्डरिंग में पहला ब्लॉक नहीं था। नोट मैंने इस मामले को एक नंगे हड्डी परियोजना के साथ करने की कोशिश की जिसमें केवल एक डेल्फी फॉर्म शामिल था।

क्या मैं वास्तव में कुछ मूर्खतापूर्ण कर रहा हूं या वास्तव में कुछ गलत है?

धन्यवाद, रॉबर्ट

type 
    E1 = class(EAbort) 
    end; 

    E2 = class(EAbort) 
    end; 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
    try 
     raise E1.Create('hello'); 
    except 
     On E: E1 do 
     begin 
      OutputDebugString('E1'); 
     end; 

     On E: E2 do 
     begin 
      OutputDebugString('E2'); 
     end; 

     On E: Exception do 
     begin 
      OutputDebugString('E(all)'); 
     end; 
    end; // try() 
end; 
+0

मैं डेल्फी 2009 में किसी भी विसंगति का निरीक्षण करने का उपयोग कर पा रहा हूं यह कोड –

+0

मुझे लगता है कि यह समस्या केवल तब होती है क्योंकि आप वास्तव में ब्लॉक के अंदर ई का उपयोग नहीं करते हैं। कंपाइलर अनुकूलन के कारण यह चर स्थिर नहीं होगा जब यह उपयोग में नहीं है। यदि आप आउटपुटडिबगस्ट्रिंग ('E1' + E.Message) जैसे कुछ में करेंगे तो इसे काम करना चाहिए। –

उत्तर

8

अगर मैं सही हूँ, व्यवहार देख रहे हैं देखा जाता है जब ई डिबगर के तहत मूल्यांकन कर (यह मैं समान व्यवहार बीडीएस 2006 डीबगर में इस परीक्षण प्राप्त)।

यह डीबगर में एक प्रतीक संकल्प बग है लेकिन रनटाइम व्यवहार को प्रभावित नहीं करता है।

अगर डिबगिंग व्यवहार महत्वपूर्ण है, बस समाधान के लिए अपने अपवाद संचालक चर नाम बदलने ताकि डिबगर किसी भी (संभावित) अस्पष्टता नहीं है के लिए:

On E1: E1 do 
begin 
    OutputDebugString('E1'); 
end; 

On E2: E2 do 
begin 
    OutputDebugString('E2'); 
end; 

On Ex: Exception do 
begin 
    OutputDebugString('E(all)'); 
end; 
+0

धन्यवाद डेल्टीक्स। मैं उस बारे में नहीं जानता था। यह Stream.size प्रॉपर्टी की तरह है जिसने मुझे हमेशा उस संपत्ति को कोड में एक चर के लिए असाइन करने का नेतृत्व किया है, इसलिए डीबगिंग के दौरान मान हमेशा देख सकता है क्योंकि डीबगर हमेशा शून्य लौटाता है। –