xamarin.mac应用程序崩溃报告

时间:2016-10-25 20:44:48

标签: c# cocoa crash-reports xamarin.mac

我的应用程序意外崩溃,我无法捕捉到任何异常...我已注册处理程序:

static void Main (string [] args)
        {
            NSApplication.Init ();
            NSApplication.Main (args);

            AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;
        }


        static void HandleUnhandledException (object sender, UnhandledExceptionEventArgs e)
        {
            //Log the exception...
            FileHelper.CreateLogFile ("app crash", e.ExceptionObject.ToString ());
        }

但它没有被召唤。

另外,我在里面看不到任何报道:

  

〜/库/日志/ DiagnosticReports

有没有办法查看我的应用程序的崩溃报告?

2 个答案:

答案 0 :(得分:2)

AppDomain.CurrentDomain.UnhandledException仅在发生托管异常时触发,冒泡整个堆栈。但是,如果您在本机代码中崩溃,或者在本机代码中使用NSException,或者在从本机代码回调时抛出托管异常,则可能根本不会执行您想要/将要调用的内容。

请改为尝试:

ObjCRuntime.Runtime.MarshalManagedException += (sender, args) =>
{
    Console.WriteLine (args.Exception);
};

您还可以在mmp marshal-objectivec-exceptions和marshal-managed-exceptions(https://github.com/xamarin/xamarin-macios/blob/master/tools/common/Driver.cs#L24)上查看这些选项。

答案 1 :(得分:0)

问题在于NSApplication.Main (args);使用主循环运行您的应用程序,因此在您退出应用程序之前,它永远不会挂上未处理的异常。

尝试以下方法:

    static void Main (string [] args)
    {
        NSApplication.Init ();

        AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;

        NSApplication.Main (args);
    }


    static void HandleUnhandledException (object sender, UnhandledExceptionEventArgs e)
    {
        //Log the exception...
        FileHelper.CreateLogFile ("app crash", e.ExceptionObject.ToString ());
    }