2015-07-21 100 views
2

我在生产中有一个Xamarin Android应用程序。在谷歌播放控制台,我可以看到许多同样的崩溃的实例,但我无法在本地重现它。堆栈跟踪是很普通:如何从生产堆栈跟踪中找到崩溃原因

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
... 1 more 
Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object 
at MyApp.Activities.MainActivity.OnCreate (Android.OS.Bundle) <0x001a4> 
at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) <0x0005b> 
at (wrapper dynamic-method) object.2b42a88f-c445-435d-aa7c-f905596cf5db (intptr,intptr,intptr) <0x00043> 

at md5317d85657469e27a0cec50bfaa82e3ea.MainActivity.n_onCreate(Native Method) 
at md5317d85657469e27a0cec50bfaa82e3ea.MainActivity.onCreate(MainActivity.java:43) 
at android.app.Activity.performCreate(Activity.java:6221) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
at android.app.ActivityThread.access$900(ActivityThread.java:172) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5832) 
... 4 more 

所以我能看到飞机坠毁在我MainActivityOnCreate。但是哪里?

崩溃是可能的在某种方法从OnCreate调用并且堆栈跟踪不准确?因为我的OnCreate非常简单,只是调用其他方法,该方法本身的代码非常几行:

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 

#if DEBUG_FRAGMENTS 
    FragmentManager.EnableDebugLogging(true); 
#endif 

    var userSettingsManager = new UserSettingsManager(this); 
    Window.SetFlags(userSettingsManager.FullScreen ? WindowManagerFlags.Fullscreen : 0, WindowManagerFlags.Fullscreen); 

    SetContentView(Resource.Layout.MainLayout); 

    if ((int)Build.VERSION.SdkInt >= 17 && Window.DecorView != null) 
    { 
     Window.DecorView.LayoutDirection = Utils.LocalizationHelper.IsLanguageRTL(userSettingsManager.Language) ? Android.Views.LayoutDirection.Rtl : Android.Views.LayoutDirection.Ltr; 
    } 

    if (this.ActionBar != null) 
    { 
     this.ActionBar.Hide(); 
    } 

    InitializeSomething(userSettingsManager); 

    InitializeSomethingElse(); 

    InitializeStuff(); 
} 

什么是该行的末尾数

at MyApp.Activities.MainActivity.OnCreate (Android.OS.Bundle) <0x001a4> 

可它在某种程度上帮我找到空引用的确切线?在常见的.NET错误中有IL偏移量,但这似乎不是一个。

+0

在API 22处从Samsung Galaxy Tab获取相同的堆栈跟踪,此时应用程序在后台运行一段时间,然后再次显示。我们有代码拦截这种行为,但崩溃发生在MainActivity.OnCreate之前 - 我的第一行有日志输出,而我没有看到它。日志显示应用程序是正确的SaveInstance-d并在之前被杀死,但有些事情仍然是错误的。 –

回答

0

可能有助于在Crashlytics获得免费账户并将其集成到您的代码中。

应该有助于获得有关生产崩溃的报告。

有关更多信息,请参阅https://try.crashlytics.com/

[更新]请忽略此操作。 Crashlytics不被Xamarin支持(截至撰写本文)。尽管它可以帮助某人遇到文章但本机开发

+0

它支持Xamarin吗?我无法找到任何信息 – batmaci

+0

是的,我的道歉,现在才意识到Xamarin不被Crashlytics支持 –