2010-02-05 16 views
7

.NET में, विधि हस्ताक्षर मुझे नहीं बताते हैं कि अगर मैंने कुछ अपवादों को संभालने में चूक की है जो मेरे कोड द्वारा फेंक दिया जा सकता है। क्या कोई ऐसा उपकरण है जो मुझे चेतावनी दे सकता है, अगर कहता है कि मैं हैशटेबल हटाने का उपयोग कर रहा हूं लेकिन ArgumentNullException को संभाला नहीं है? मैं रन टाइम पर आश्चर्यचकित नहीं होना चाहता हूं।मुझे कैसे पता चलेगा कि मैंने कुछ अनचेक अपवादों को संभाला नहीं है कि मेरा .NET कोड फेंक सकता है?

और क्या इसका मतलब यह है कि आपको अपने कोड को बहुत अच्छी तरह से जानना होगा, अन्यथा अनचेक अपवादों के साथ काम करना कठिन हो सकता है?

उत्तर

4

वास्तव में, प्रोग्राम को समाप्त करके अप्रत्याशित अपवादों को संभालने का यह तरीका है कि इस स्थिति से निपटने का सबसे अच्छा तरीका है, सामान्य रूप से, प्रोग्राम स्थिति अनिश्चित होती है जब कुछ अप्रत्याशित होता है। यदि आप सभी अपवादों को लॉग करते हैं, और स्वीकृति परीक्षण का एक सभ्य सेट है, तो आप प्रोग्राम प्रवाह के कारण अप्रत्याशित अपवादों से आने वाली समस्याओं को खत्म कर सकते हैं।

विधि इनपुट की जांच करके रक्षात्मक प्रोग्रामिंग, कक्षाओं के यूनिट परीक्षण और आपके ढांचे को समझने से अधिकांश अपवाद अपेक्षित होंगे।

1

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

+0

मैं मानता हूँ यह एक बुरी बात सिर्फ अपवाद को पकड़ने और यह ठीक से उपयोग आप कैसे प्रोग्राम करने के लिए प्रतिक्रिया चाहिए के लिए एक निर्णय करने के लिए नहीं करने के लिए यह बुरा है। यह वीबी 6 में बस 'त्रुटि फिर से शुरू करें' कहने के लिए है। – awe

1

आपको अपने आवेदन के लिए शीर्ष स्तर के अपवाद हैंडलर को जोड़ना चाहिए और अपने ऐप के लिए इकाई, कार्यात्मक और एकीकरण परीक्षण लिखना चाहिए, जो सभी संभावित उपयोग मामलों का परीक्षण करेगा। यह आपको लगभग सभी अनचेक अपवादों को खत्म करने में मदद करेगा।

अपवादों को पकड़ने की कोशिश न करें, लेकिन कारण को खत्म करें। (यानी ArgumentNullException पकड़ नहीं लेकिन गुजर नहीं है null

2

खिड़कियों अनुप्रयोगों के लिए:

AppDomain currentDomain = default(AppDomain); 
currentDomain = AppDomain.CurrentDomain; 
// Handler for unhandled exceptions. 
currentDomain.UnhandledException += UnhandledExceptionHandler; 
// Handler for exceptions in threads behind forms. 
Application.ThreadException += ThreadExceptionHandler; 

public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) 
{ 
} 

public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e) 
{ 
} 
+0

@ असीम: सुनिश्चित नहीं है कि मैं इसे समझता हूं .. इसलिए, अगर मैंने उन्हें संभाला नहीं है तो सभी अनचाहे और थ्रेड संबंधित अपवाद यहां आएंगे, और यह कुछ सुरक्षा प्रदान करता है .. क्या आपका इरादा यहां है? –

+0

हाँ ... आप तय कर सकते हैं कि इन अपवादों के साथ क्या करना है। –

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