使用Xamarin.Insights时,异常通常会导致崩溃

时间:2015-01-09 01:35:06

标签: c# ios mono xamarin.ios xamarin

当我使用Xamarin Insight时,非常普通的异常(如NullReferenceException)会导致应用程序崩溃,即使它们位于try块中,因此应该被捕获。

当我从FinishedLaunching中删除以下行时,它会恢复正常。它捕获了所有例外。

知道什么是错的吗?

Xamarin.Insights.Initialize(ApiKey);

这是一个例子。

try
{
    PerformSegue("NON-EXISTING-SEGUE", this); // will throw an exception
}
catch(Exception exception)
{
    Console.WriteLine(exception.Message);
}

我甚至不使用Xamarin.Insights来报告异常,但它仍会导致应用程序崩溃。当我删除Xamarin.Insights时,它会捕获异常。

2 个答案:

答案 0 :(得分:1)

这是旧问题,但我认为它仍然有用

将其放入AppDelegate.cs

[DllImport ("libc")]
private static extern int sigaction (Signal sig, IntPtr act, IntPtr oact);

enum Signal {
    SIGBUS = 10,
    SIGSEGV = 11
}

static void EnableCrashReporting ()
{
    IntPtr sigbus = Marshal.AllocHGlobal (512);
    IntPtr sigsegv = Marshal.AllocHGlobal (512);

    // Store Mono SIGSEGV and SIGBUS handlers
    sigaction (Signal.SIGBUS, IntPtr.Zero, sigbus);
    sigaction (Signal.SIGSEGV, IntPtr.Zero, sigsegv);

    // Enable crash reporting libraries
    EnableCrashReportingUnsafe ();

    // Restore Mono SIGSEGV and SIGBUS handlers            
    sigaction (Signal.SIGBUS, sigbus, IntPtr.Zero);
    sigaction (Signal.SIGSEGV, sigsegv, IntPtr.Zero);
}

static void EnableCrashReportingUnsafe ()
{
    // Run your crash reporting library initialization code here--

    // Verify in documentation that your library of choice
    // installs its sigaction hooks before leaving this method.

    Xamarin.Insights.Initialize(ApiKey);
}

EnableCrashReporting ()方法的开头调用FinishedLaunching。 如果需要,请在#if !DEBUG指令中包含此调用。

您可以在xamarin forum

了解有关此问题的更多信息

答案 1 :(得分:0)

你不能在c#中打破try / catch语句,所以它听起来像其他东西正在发生,你没有留下太多的信息或示例代码所以我唯一可以猜到的是另一个线程,可能一个内部见解,正在崩溃,并且该线程由您的try / catch

中的某些内容触发