2012-11-15 12 views
6

Possible Duplicate:
VS2010 does not show unhandled exception message in a WinForms Application on a 64-bit version of Windowsवी.एस. 2012 (VB.net) विंडोज 7 पर बिना क्रिया अपवाद अनदेखी कर रहा है 64 बिट

मैं सिर्फ स्थापित किया है और VS2012 उपयोग शुरू कर दिया। पहले वीएस -2008 एक्सप्रेस का उपयोग कर रहा था। वी 72012 विन 7 64-बिट पर चल रहा है। (पिछला देव पर्यावरण XP 32-बिट पर था)।

अभी तक एक मूल शोध परियोजना (WinForms, VB) के साथ अभी तक मिला है, और पाया कि वीएस अनचाहे अपवादों को अनदेखा कर रहा है। इस की अंतिम पंक्ति एक अपवाद का कारण होना चाहिए:

With cmd 
.Connection = sqlConn 
.CommandType = CommandType.StoredProcedure 
.CommandText = "NameOfStoredProcedure" 
.Parameters.Add("@TheParameterName", SqlDbType.Int, -1) 
.Parameters("@TheParameterNameWithATypo").Direction = ParameterDirection.ReturnValue 

पर्याप्त ज़रूर, तत्काल खिड़की से पता चलता:

A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll 

लेकिन कोड सिर्फ चलाने पर किया जाता है!

डीबग/अपवाद संवाद में, मेरे पास हर प्रकार के अपवाद के लिए "फेंक दिया गया" और "उपयोगकर्ता-अनचाहे" चेकबॉक्स है। "उपयोगकर्ता-अनचाहे" सभी के लिए चुना जाता है। मैं "थ्रोउन" पर टिक नहीं करना चाहता, क्योंकि मैं अपवादों को संभालने वाला हूं और हैंडल अपवादों को तोड़ना नहीं चाहता हूं। (अभी, मेरे पास कोई प्रयास नहीं है ... बिल्कुल ब्लॉक पकड़ें - लेकिन डीबगर काम कर रहा है जैसे कि पूरी परियोजना एक में निहित है)।

मैंने सभी विकल्पों को देखा है और इसी तरह, लेकिन कोई जादू नहीं है "अपवाद पर ब्रेक ऑन" विकल्प। यह मेरा कोड नहीं है जिसके साथ मैं मदद की तलाश में हूं - यह है कि इस घटना के साथ मैं बेवकूफ गलतियों का पता लगाने के लिए डीबगर पर भरोसा नहीं कर सकता जो मैं अनिवार्य रूप से करूँगा।

एक और question मिला जहां कोई इसमें भाग गया, और समस्या Win64 के साथ प्रतीत होती है। लेकिन वीएस वास्तव में Win64 पर अनुपयोगी है? मैं काफी विश्वास नहीं कर सकता - लेकिन अनचाहे अपवादों को तोड़ने से प्रभावी ढंग से इसे अनुपयोगी बना दिया जाता है।

संपादित करें: आपकी सभी टिप्पणियों के लिए धन्यवाद। मैं Neolisk के समाधान की कोशिश की, लेकिन कोड थोड़ा बदलना पड़ा क्योंकि दो संचालकों के हस्ताक्षर अलग हैं:

Public Sub Main() 
    AddHandler Application.ThreadException, AddressOf ThreadExceptionHandler 
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) 
    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionHandler 

    Form1.Show() 
End Sub 

Friend Sub ThreadExceptionHandler(sender As Object, e As System.Threading.ThreadExceptionEventArgs) 

End Sub 

Friend Sub UnhandledExceptionhandler(sender As Object, E As System.UnhandledExceptionEventArgs) 
End Sub 

यह काम किया - धन्यवाद! लेकिन मुझे एप्लिकेशन फ्रेमवर्क को अक्षम करने की आवश्यकता थी (अन्यथा ऐप स्टार्टअप के रूप में सब मेन का उपयोग नहीं कर सकता)। और टीबीएच मैं एक .NET शुरुआत करने वाला बहुत अधिक हूं, यह भी सुनिश्चित करने के लिए कि इसका क्या प्रभाव/फायदे/नुकसान हैं। मैंने आपके द्वारा प्रदान किए गए लिंक पर पढ़ा है, और क्या हो रहा है, लेकिन अगर मैं इससे बच सकता हूं तो शामिल नहीं होना चाहता ...

सौभाग्य से, KB976038 में हॉटफिक्स को लागू करने के लिए मेरे लिए काम किया है । कोड जो अपवाद का कारण बनता है और डीबग मोड में निष्पादन में ब्रेक, फॉर्म_लोड ईवेंट को बंद कर रहा है, अब यह अपेक्षा करता है। यह एप्लिकेशन फ्रेमवर्क सक्षम है, फॉर्म 1 स्टार्टअप ऑब्जेक्ट के रूप में, और ऊपर दिए गए कोड पर टिप्पणी की गई है।

EDIT2: नहीं, वह हॉटफिक्स काम नहीं करता है। मूल "खराब पैरामीटर नाम" लाइन ने कोड को अपवाद के साथ रोक दिया। लेकिन अभी इस त्रुटि बॉक्स की वजह से एक DBNull-> Int32 रूपांतरण अपवाद के साथ बाद में एक लाइन (और कोई डिबगिंग संभावना):

vshost.exe - Application Error INTERNAL ERROR: Unhandled exception in Debugger::HandleIPCEvent. Event ID=0x246 Exception code=0x0000005, Eip=0x70d58101. Process ID=0xbec (3052), Thread ID=0xb1c (2844).

मैं वास्तव में अपने सभी टिप्पणियों की सराहना - लेकिन मेरे मन को यह एक सौदा ब्रेकर है: कैसे क्या डेवलपर वीएस का उपयोग कर सकता है अगर वे विश्वास नहीं कर सकते कि अपवाद डीबग करने योग्य होंगे?मुझे उप मेन के साथ शुरू करने के लिए याद रखना नहीं चाहिए और हर बार जब मैं कुछ विकसित करना चाहता हूं तो उन विशेष लाइनों को रखना चाहिए: या याद रखें कि आप फॉर्म_लोड में कोड का उपयोग नहीं कर सकते हैं? मैं अनुशंसा करने जा रहा हूं कि हम विकास ओएस के रूप में Win7 64-बिट का उपयोग करना बंद कर दें।

+0

मैं विन 7 64 बिट पर वीएस 2012 का उपयोग करता हूं, मेरे अपवाद ठीक काम करते हैं। हालांकि, लक्ष्यीकरण के नेट फ्रेमवर्क के संस्करण को बदलने का प्रयास करें। नवीनतम कोशिश करें। मैंने उन उदाहरणों के बारे में पढ़ा है जहां यह हो सकता है यदि डीबगर एक अलग ढांचे को डिबग कर रहा है तो परियोजना चल रही है। – Kratz

+0

@ हंसपैसेंट: एक ही कारण, अलग-अलग प्रारंभिक स्थितियां। ओपी वीएस 2012 का उपयोग कर रहा है। – Neolisk

+1

ठीक है, यह वीएस2012 में तय नहीं हुआ है। इसे वीएस 2021 में भी तय नहीं किया जाएगा। उम्मीद है कि अब तक हमें इसके बारे में परवाह नहीं है। –

उत्तर

3

मुझे लगता है कि आपके पास में आपका कोड है, जैसा कि यह समझाएगा। यदि ऐसा है, तो मेरे प्रश्न पर एक नज़र डालें: Explain critical bug in Visual Studio 2010 and up, WinForms and WPF। यह एक ज्ञात मुद्दा है। आपको या तो से अपना कोड डालना होगा या अपना एप्लिकेशन Sub Main से शुरू करना होगा और उन 3 जादू लाइनों को रखें जिन्हें आप पहले ही सी # के लिए मिला है। यहाँ VB.NET के लिए एक ही 3 लाइनों हैं:

AddHandler Application.ThreadException, AddressOf YourExceptionHandler 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) 
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf YourExceptionHandler 

जहाँ तक मुझे याद है के रूप में, पहली पंक्ति वास्तव में इस समस्या का समाधान होता है, अन्य 2 अन्य रहस्यमय त्रुटियों के लिए कवर करने के लिए कर रहे हैं। यह हमेशा सुरक्षित होने के लिए, अपने कार्यक्रम की शुरुआत में उन्हें हमेशा शामिल करने में कोई दिक्कत नहीं होती है। YourExceptionHandler एक खाली विधि हो सकती है। एक बार जब आप इन 3 लाइनों को जोड़ देते हैं, तो अपवाद पकड़ने की उम्मीद के अनुसार काम करना शुरू कर देना चाहिए।

+0

धन्यवाद! मैं उम्मीद कर रहा था कि मुझे अभी इस तरह की गहराई में खोदना नहीं होगा। मुझे मॉड्यूल में उप मेन में यह थोड़ा अलग कोड जोड़ना पड़ा है: – sebt

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