当我使用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时,它会捕获异常。
答案 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
中的某些内容触发