2011-10-12 10 views
5

में बेजोड़ अपवाद खोजें मुझे लगता है कि स्थिर कोड विश्लेषण का उपयोग कर सी # में बेजोड़ अपवादों को खोजने के लिए कोई उपकरण है या नहीं? असल में मैं एक विधि ए() का चयन करना चाहता हूं और methodA() द्वारा विधिवत सभी अपवादों की एक सूची और methodA() द्वारा बुलाए गए सभी विधियों की एक सूची चाहता हूं। मैंने ReSharper + Agent Johnson और AtomineerUtils की कोशिश की, दोनों इस सरल कार्य को विफल कर देते हैं।सी # कोड

public class Rectangle 
{ 
    public int Width { get; set; } 
    public int Height { get; set; } 

    public int Area() 
    { 
     CheckProperties(); 
     long x = Width * Height; 
     if (x > 10) 
      throw new ArgumentOutOfRangeException(); 
     return (int) x; 
    } 

    private void CheckProperties() 
    { 
     if (Width < 0 || Height < 0) 
      throw new InvalidOperationException(); 
    } 
} 

उपकरण मुझे (किसी भी रूप में) बताने के लिए कि विधि क्षेत्र() ArgumentOutOfRangeException या InvalidOperationException.

+3

मैं देख रहा हूँ कि आप क्या चाहते हैं और तुम कहाँ है लेकिन अभी भी करने के लिए कोशिश कर रहे हैं, विचार है कि कई मामलों में यह कोड से अपवाद फेंक के लिए ठीक है, तथ्य यह है कि है:

अगर यह इसके लायक है खुद के लिए तय हर बार जब आप अपने वास्तविक खपत वर्गों से उन तरीकों का उपयोग करते हैं, तो आपको वहां पकड़ना चाहिए, यह शायद 100% जुर्माना है कि क्षेत्र कुछ फेंकता है और वहां पकड़ने की आवश्यकता नहीं होती है, लेकिन जो आयताकार कहता है। एरिया चाहिए ... –

+0

@ डेविड पाइरा: मैं समझता हूं आपका मुद्दा और आपसे सहमत हैं, लेकिन विचार करें कि आप वास्तव में खराब दस्तावेज के साथ एक बड़ी तीसरी पार्टी लाइब्रेरी का उपयोग कर रहे हैं - बेकार खोजना (या उन्हें "संभावित रूप से फेंक दिया गया") अपवाद वास्तव में डिबगिंग और विकास को कम करेगा। – Korexio

उत्तर

6

मैं एक आर # ऐड एक बार इस्तेमाल फेंक होगा सक्षम होना चाहिए:

यहाँ मेरी उदाहरण कोड है उसने आईडीई में किया - असाधारण। बुरा विचार, यह पता चला है कि यह हर एक स्ट्रिंग के बारे में शिकायत करता है। फर्मेट कॉल और इसी तरह के आम मामले जो वास्तव में फेंक सकते हैं, लेकिन इससे समस्याएं नहीं आतीं। https://github.com/CSharpAnalyzers/ExceptionalReSharper

+0

जब मैं एक साधारण प्रोग्राम का उपयोग करता हूं "कंसोल। राइटलाइन (नया आयत()। क्षेत्र());" ऊपर दिए गए वर्ग के साथ, असाधारण केवल मुझे कंसोल के लिए एक त्रुटि देता है। राइटलाइन (...) (System.IO.IOException uncaught) लेकिन क्षेत्र() को कॉल के लिए नहीं ... इस के चारों ओर दूसरा तरीका उपयोगी होगा, लेकिन इस तरह यह कोई सुधार नहीं है ... – Korexio

+1

कोई बात नहीं, समस्या मिली: मैंने क्षेत्र() विधि में समस्या को ठीक नहीं किया - इसलिए असाधारण ने कॉल को अनदेखा कर दिया। क्षेत्र() में दस्तावेज जोड़ना मुख्य (...) में एक चेतावनी का कारण बनता है। – Korexio

+0

ऊपर वर्णित मुद्दे के बिना (http://exceptionalplugin.codeplex.com/workitem/9632) असाधारण एक उपयोगी उपकरण की तरह लगता है। अभी भी अन्य उपकरण सुझावों का स्वागत है! – Korexio