我的应用程序意外崩溃,我无法捕捉到任何异常...我已注册处理程序:
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
有没有办法查看我的应用程序的崩溃报告?
答案 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 ());
}