2011-08-31 9 views
5

एक कार्यक्रम में मैंने गलती से closeHandle() को म्यूटेक्स हैंडल पर दो बार बुलाया (जो हैंडल बंद कर दिया गया था) बंद कर दिया।क्या कुछ अपवाद त्रुटियां केवल डीबगर में होती हैं?

डीबगर में कोड चलाते समय, मुझे अपेक्षित त्रुटि An invalid HANDLE was specified. प्राप्त हुई।

हालांकि, कार्यक्रम "सामान्य रूप से" अकेले स्टैंड (डीबगर के बाहर) के रूप में चलाना अपवाद प्रकट नहीं होता है या कोई अन्य त्रुटि नहीं होती है। कार्यक्रम सामान्य रूप से चल रहा प्रतीत होता है।

क्या यह सिर्फ विजुअल स्टूडियो .NET 2003 में एक सेटिंग है या इसके पीछे और कुछ है?

+6

यह क्लोजहैंडल() के दस्तावेज़ का व्यवहार है। Http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspx देखें: "यदि एप्लिकेशन डीबगर के तहत चल रहा है, तो फ़ंक्शन एक अपवाद फेंक देगा यदि यह या तो प्राप्त करता है वैल्यू को संभाल लें जो मान्य नहीं है या छद्म-हैंडल मान। " – user168715

+0

शायद आप वीएस .NET में डीबग बिल्ड चला रहे हैं, लेकिन जब आप डबल-क्लिक करते हैं तो रिलीज बिल्ड चला रहे हैं? –

+0

मैंने आवेषण के साथ समान व्यवहार देखा है। सशर्त संकलन यह कर सकता है। –

उत्तर

5

documentation कहता है:

आवेदन एक डिबगर के तहत चल रहा है, समारोह एक अपवाद अगर यह या तो एक संभाल मूल्य कि मान्य नहीं है या एक छद्म संभाल मूल्य प्राप्त फेंक देते हैं। यह तब हो सकता है जब आप दो बार हैंडल बंद करते हैं, या यदि आप FindClose फ़ंक्शन को कॉल करने के बजाय FindFirstFile फ़ंक्शन द्वारा लौटाए गए हैंडल पर क्लोजहैंडल को कॉल करते हैं।

+0

"अपवाद फेंको" ?! मैं उम्मीद करता हूं कि एमएसडीएन दस्तावेज लेखकों को बेहतर पता चल जाएगा। सी कार्य अपवाद फेंक नहीं है। Win32 अपवादों (उर्फ संरचित अपवाद हैंडलिंग) के संदर्भ में, अपवाद * उठाए * प्राप्त नहीं होते हैं। –

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