سؤال

هو هناك .صافي ما يعادل C++ غير متوقعة()/set_unexpected() وظيفة ؟


تحرير: آسف--أنا حذفت بعض التفاصيل سابقا:

اللغة:C# 2.0

لدي بعض تراث التطبيقات التي يبدو أن رمي بعض استثناء غير معالج في مكان ما.أنا فقط أريد أن أضع شيئا في مكان لوقف العميل الألم حتى أنا يمكن أن تتبع الفعلي مصدر المشكلة.في C++, وظيفة وأشار في طريق set_unexpected() يحصل تسمى, بقدر ما أعرف ، عندما يكون ذلك استثناء غير معالج فقاعات روتين الرئيسي.وبالتالي سؤالي عن .صافي ما يعادلها الوظيفة.

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

المحلول

هناك 3 سيناريوهات محتملة للتعامل مع الاستثناءات غير المعالجة ، استنادا إلى نوع من التطبيق:

  1. من أجل تطبيق نماذج windows, هوك معالج الحدث إلى التطبيق.ThreadException
  2. بالنسبة فلكس التطبيقات هوك معالج الحدث إلى AppDomain.UnhandledException
  3. بالنسبة ASP.NET التطبيقات العالمية.asax إنشاء:

    محمية الفراغ Application_Error(Object sender, EventArgs e)

تنويه:أنا لست c++ المطور, لكن من خلال ما قرأت هذه الإجابة على سؤالك.

نصائح أخرى

هذه معالجات يجب أن الصيد غير متوقعة الاستثناءات في وضع مختلط التطبيق.

private delegate long UnhandledExceptionFilter(IntPtr exception);

[DllImport("KERNEL32.DLL", SetLastError = true)]
private static extern IntPtr SetUnhandledExceptionFilter([MarshalAs(UnmanagedType.FunctionPtr)] UnhandledExceptionFilter filter);

// put these in your bootstrapper
AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
Application.ThreadException += ApplicationThreadException;
SetUnhandledExceptionFilter(UnhandledExceptionFilter);

void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    ...
}

void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
    ...
}

long UnhandledExceptionFilter(IntPtr exception)
{
    ....
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top