2008-11-02 11 views
7

एक प्रोफाइलर का उपयोग करने का छोटा, क्या पहले अवसर अपवादों का पता लगाने के लिए चल रहे प्रोग्राम के अंदर कोई रास्ता है? आदर्श रूप में, मैं अधिक विस्तृत राज्य जानकारी रिकॉर्ड करना चाहता हूं जो कि अंतिम अपवाद पर कैच ब्लॉक ने लिया है।क्या पहले मौका अपवादों को लॉग या अवरुद्ध करने का कोई तरीका है

+0

आप किस जानकारी को खो देते हैं? – pipTheGeek

+0

सही करने के लिए खुश: यदि आप प्रत्येक विधि में सभी अपवादों को संभाल नहीं पाते हैं और सुनिश्चित करें कि सभी चर को कोशिश-पकड़ ब्लॉक के बाहर परिभाषित किया गया है तो बिंदु पर अंतिम अपवाद उठाया गया है, तो आपके पास सभी चरों तक पहुंच नहीं होगी मूल अपवाद के निष्पादन संदर्भ में उपलब्ध थे। –

उत्तर

2

मुझे लगता है कि .NET में वह जानकारी प्राप्त करने का एकमात्र तरीका एक डीबगर का उपयोग कर रहा है।

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

सिस्टम में ट्रेस और आर्ट क्षमताओं का उपयोग करने के लिए एक बेहतर समाधान होगा। प्रोग्राम स्थिति का चयन करने के लिए डायग्नोस्टिक्स नामस्थान, या लॉगिंग सुविधा का उपयोग करने के लिए (लॉग 4नेट, एंटरप्राइज़ लाइब्रेरी, एनएलओजी, अपना खुद का सरल रोल करें) डंप करने के लिए थ्रेड/स्टैक/परिवर्तनीय जानकारी जैसे आप जाते हैं।

किसी भी मामले में, यह अतिरिक्त जानकारी जोड़ना एक बड़ा ओवरहेड है।

संपादित करें: मुझे इस परियोजना की मेरी फ़ीड में खबर मिली: NTrace। ऐसा लगता है कि आप जो कुछ करने की कोशिश कर रहे हैं उससे थोड़ा अधिक फिट होगा।

1

Adplus का उपयोग करें। यह प्रोसेस में एक डीबगर संलग्न करेगा, और पहली मौका उत्तेजना उठाए जाने पर एक छोटा मिनीडम्प उत्पन्न करेगा (डिफ़ॉल्ट रूप से)। एडप्लस जेनरेट लॉग फ़ाइल में अपवाद जानकारी भी होगी। बस सुनिश्चित करें कि आपके पास पूर्ण कैल्स्टैक जानकारी देखने के लिए पीडीबी का लाभदायक है।

16

मैं FirstChanceException googling किया गया था, और मैं इस से अधिक दो साल बाद जवाब देने नहीं विरोध कर सकते हैं ...

अब, .net 4.0 में, आप AppDomain की FirstChanceException event पकड़ कर सकते हैं। यह केवल एक घटना है, इसलिए आप त्रुटि को संभाल नहीं सकते हैं, लेकिन यह अपवादों पर जानकारी प्राप्त करने के लिए एक अच्छा, केंद्रीय तरीका प्रतीत होता है कि उन्हें संभाला गया है या नहीं। कैच ब्लॉक को इसे संभालने की अनुमति देने से पहले FirstChanceException ईवेंट फेंक दिया जाता है। मुझे इस पर बहुत सारी जानकारी नहीं मिली है, लेकिन माइक्रोसॉफ्ट दस्तावेज से अलग, बेहतर स्रोतों में से एक Mitch Sellers Blog है।

+0

मेरी इच्छा है कि नेट 3.5 में ऐसा करने का कोई तरीका था। मेरे पास उत्पादन में 3.5 प्रक्रिया है और 3.5 में 'फर्स्टचेंस अपवाद' जैसी कुछ मुझे डिस्कनेक्ट समस्या को ट्रैक करने में मदद कर सकती है ... –

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

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