.NET - أول فرصة استثناء استثناء لتصحيح الأخطاء المكثفة؟

StackOverflow https://stackoverflow.com/questions/952304

سؤال

ربما هذا من غير الواقعي، لكن من الممكن تمكين مكون من إخطار جميع الاستثناءات الأولية الأولى في عمليةها؟

لدينا بعض مكونات طرف ثالث (تعاقدت من قبلنا) التي تفشل في فعل أي شيء سوى تناول استثناءات وسياسة العلاقة التجارية تجعل محنة كاملة من الألم الملكي.

نحن ندرك أيضا أن بعض الكود الخاص بنا يقوم بإجراء الإجراء المخيب للآمال لترك الاستثناءات تختفي في الهاوية بدلا من استخدام مسجل الاستثناء المركزي لدينا.

أفترض أن طلبنا يجب أن يبدأ كعملية لطفل لتطبيق تصحيح الأخطاء لتحقيق التأثير، لكنني أرخص أنه يستحق السؤال :)

هل كانت مفيدة؟

المحلول

صافي 4.0 قد أضاف بالفعل AppDomain.FirstChanceException حدث. إنه حرائق قبل تنفيذ أي كتلة الصيد.

هذه MSDN المادة لديه بعض الأمثلة.

أساسا أنت فقط أضف معالج حدث مثل هذا:

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

نصائح أخرى

يمكنك استخدام واجهة برمجة تطبيقات التنميط .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...

الحدث أو ما شابه ذلك.

تحرير: بديل أفضل ربما يستخدم API تصحيح الأخطاء غير المشروع في حين أن.

أساسا يمكنك تعيين IcormanagedCallback./iCormanagedCallback2. رد الاتصال باستخدام ICORDEBUG :: SetManagedHandler. والحصول على ردود الاحتياطات عند حدوث استثناءات.

أنا لست من ذوي الخبرة بما فيه الكفاية في هذا المجال لمعرفة ما هي مزايا / عيوب أكثر من واجهة برمجة تطبيقات التنميط.

أنا فقط ألقي نظرة على MDGB عينة التي تستخدم APIs ICORDEBUG ويبدو أنه يتمتع بإشعارات كافية تماما من الاستثناءات (لترى بسرعة الأحداث التي تحدث بسرعة، قم بتعيين نقطة توقف في طريقة المقود في Corapi / Debugger.cs: 406)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top