我在生产中有一个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
所以我能看到飞机坠毁在我MainActivity
的OnCreate
。但是哪里?
崩溃是可能的在某种方法从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偏移量,但这似乎不是一个。
在API 22处从Samsung Galaxy Tab获取相同的堆栈跟踪,此时应用程序在后台运行一段时间,然后再次显示。我们有代码拦截这种行为,但崩溃发生在MainActivity.OnCreate之前 - 我的第一行有日志输出,而我没有看到它。日志显示应用程序是正确的SaveInstance-d并在之前被杀死,但有些事情仍然是错误的。 –