2009-06-04 8 views
8

यह शायद अवास्तविक है, लेकिन क्या यह संभव है कि किसी घटक को इसकी प्रक्रिया में होने वाले सभी मौके के अपवादों के बारे में अधिसूचित किया जा सके?.NET - गहन डिबगिंग के लिए पहला मौका अपवाद श्रोता?

हमारे पास कुछ तीसरे पक्ष (हमारे द्वारा अनुबंधित) घटक हैं जो कुछ भी करने में विफल रहते हैं लेकिन व्यापार संबंधों की राजनीति और राजनीति की राजनीति पूरी तरह से शाही दर्द बनाती है।

हम यह भी जानते हैं कि हमारे कुछ कोड हमारे केंद्रीकृत अपवाद लॉगर का उपयोग करने के बजाय अस्थियों में अपवादों को समाप्त करने की निराशाजनक कार्रवाई कर रहे हैं।

मुझे लगता है हमारे आवेदन एक डिबगिंग आवेदन प्रभाव को प्राप्त करने का एक बच्चा प्रक्रिया के रूप में शुरू करना होगा, लेकिन मैं समझ यह :)

उत्तर

2

नेट 4.0 ने वास्तव में AppDomain.FirstChanceException ईवेंट जोड़ा है। किसी भी पकड़ ब्लॉक को निष्पादित करने से पहले यह आग लगती है।

यह MSDN article में कुछ उदाहरण हैं।

मूल रूप से आप सिर्फ इस तरह की एक घटना हैंडलर जोड़ने:

AppDomain.CurrentDomain.FirstChanceException += 
     (object source, FirstChanceExceptionEventArgs e) => 
     { 
      Console.WriteLine("FirstChanceException event raised in {0}: {1}", 
       AppDomain.CurrentDomain.FriendlyName, e.Exception.Message); 
     }; 
+0

बहुत अच्छा लगता है! इस पुराने सवाल को दूर करने के लिए बहुत बहुत धन्यवाद! – STW

7

आप .net रूपरेखा एपीआई का उपयोग कर सकते हैं की सूचना पाने के लिए पूछ लायक है

ExceptionThrown 
ExceptionSearchFunctionEnter 
ExceptionSearchFunctionLeave 
ExceptionSearchFilterEnter 
ExceptionSearchFilterLeave 
ExceptionSearchCatcherFound 
ExceptionOSHandlerEnter 
ExceptionOSHandlerLeave 
ExceptionUnwindFunctionEnter 
ExceptionUnwindFunctionLeave 
ExceptionUnwindFinallyEnter 
ExceptionUnwindFinallyLeave 
ExceptionCatcherEnter 
ExceptionCatcherLeave 
ExceptionCLRCatcherFound 
ExceptionCLRCatcherExecute 

रूपरेखा एपीआई का उपयोग कर दिल वालों के लिए पूरी तरह से नहीं है;: राज्यों के सभी प्रकार में अपवाद हैं, इन पद्धतियां उपलब्ध हैं विशेष रूप से अपवाद हैंडलिंग के लिए http://msdn.microsoft.com/en-us/library/ms404386.aspx पर अपने शोध के लिए प्रवेश बिंदु और http://msdn.microsoft.com/en-us/library/bb384687.aspx पर एक नज़र डालें।

मैं इसे अपने प्रबंधित कोड के भीतर इस तरह के रूप

AppDomain.FirstChanceException += new EventHandler... 

घटना या इसी तरह करने के लिए एक आसान तरीका के बारे में पता नहीं कर रहा हूँ।

संपादित करें: संभवतः unamanaged debugging API का उपयोग कर एक बेहतर विकल्प वैकल्पिक है।

मूल रूप से आप ICorManagedCallback/ICorManagedCallback2ICorDebug::SetManagedHandler का उपयोग करके कॉलबैक सेट कर सकते हैं और अपवाद होने पर कॉलबैक प्राप्त कर सकते हैं।

मुझे इस क्षेत्र में पर्याप्त अनुभव नहीं हुआ है कि यह जानने के लिए प्रोफाइलिंग एपीआई पर क्या फायदे/नुकसान हैं।

मैं सिर्फ mdgb sample जो ICorDebug API का उपयोग करता है पर एक नज़र था और यह अपवाद (से काफी पर्याप्त सूचनाएं प्राप्त करने के लिए जल्दी से देखने के लिए, क्या घटनाएं घटित हो corapi/Debugger.cs में handleEvent विधि में एक ब्रेकपाइंट सेट लगता है: 406)

+0

मैं इसे आसान होने की उम्मीद नहीं था, लेकिन एक में सड़क सब मैं कम से कम यह का एहसास दिलाने की जरूरत है। बहुत धन्यवाद! – STW

+0

मैंने एमडीबीजी के साथ खेलने के बाद अपना जवाब संपादित किया, मुझे विश्वास है कि संभवतः आईसीओआरडीब एपीआई ऐसा करने का एक बेहतर तरीका हो सकता है। –

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