如何从生产堆栈跟踪中找到崩溃的原因

时间:2015-07-21 07:29:51

标签: android xamarin xamarin.android

我正在制作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

所以我可以看到崩溃发生在OnCreate的{​​{1}}。但是哪里?

崩溃是否可能是从OnCreate调用的某些方法,并且堆栈跟踪不准确?因为我的OnCreate几乎只调用其他方法,方法本身只有很少的代码行:

MainActivity

此行末尾的数字是

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();
}

它能以某种方式帮助我找到空引用的确切行吗?在常见的.NET错误中有IL偏移量,但这看起来不像一个。

1 个答案:

答案 0 :(得分:0)

可以帮助在Crashlytics获得一个免费帐户并将其集成到您的代码中。

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

有关详细信息,请参阅https://try.crashlytics.com/

[更新]请忽略这一点。 Xamarin不支持Crashlytics(截至撰写本文时)。将留在这里的帖子,以防它有助于某人遇到文章,但正在本地开发