【问题标题】:Random System.ArgumentException: 'jobject' must not be IntPtr.Zero随机 System.ArgumentException:“jobject”不得为 IntPtr.Zero
【发布时间】:2023-03-15 09:45:01
【问题描述】:

我们有随机的System.ArgumentException 与 Android 上的 Xamarin。它是完全随机的——它可以随时随地在任何平台上发生。我们在 5.1、5.0、4.4.4 上注册了它。

它没有足够的堆栈跟踪,它没有抛出的地方,我无法用任何东西抓住它。我认为它可能与async void 有某种关系,我们在项目中使用MVVMCross 并且有很多async void Initasync void DoMvxCommand 方法。但它们都包含在 try-catch 块中。

我非常需要任何关于如何修复或至少找到这次崩溃原因的建议。这是最新的崩溃日志

undefined   INFO:   ActivityManager : Displayed com.website.app/md599d9a15f782f9118e8e70c354562b227.SuccessPaymentView: +220ms
undefined   WARN:   ContextImpl : Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1629 com.android.server.InputMethodManagerService$6.run:2728 java.lang.Thread.run:818 <bottom of call stack> <bottom of call stack>


undefined   WARN:   ActivityManager : mDVFSHelper.release()
undefined   INFO:   Timeline : Timeline: Activity_windows_visible id: ActivityRecord{1aca0d50 u0 com.website.app/md599d9a15f782f9118e8e70c354562b227.SuccessPaymentView t5672} time:169720248

undefined   INFO:   MonoDroid : UNHANDLED EXCEPTION:

undefined   INFO:   MonoDroid : System.ArgumentException: 'jobject' must not be IntPtr.Zero.
undefined   INFO:   MonoDroid : Parameter name: jobject
undefined   INFO:   MonoDroid : at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
undefined   INFO:   MonoDroid : at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <0x0003f>
undefined   INFO:   MonoDroid : at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <0x00027>
undefined   INFO:   MonoDroid : at Java.Lang.Thread/RunnableImplementor.Run () <0x0003f>
undefined   INFO:   MonoDroid : at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <0x0003b>
undefined   INFO:   MonoDroid : at (wrapper dynamic-method) object.81971695-c4eb-4dd7-9e27-0dec45822877 (intptr,intptr) <0x0003b>
undefined   DEBUG:  LockPatternUtilsCache : getCarrierLockPlusMode()
undefined   DEBUG:  LockPatternUtilsCache : value : false
undefined   WARN:   Xamarin.Insights : Warning: Unhandled exception: System.ArgumentException: 'jobject' must not be IntPtr.Zero.
undefined   WARN:   Xamarin.Insights : Parameter name: jobject
undefined   WARN:   Xamarin.Insights : at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
undefined   WARN:   Xamarin.Insights : at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <0x0003f>
undefined   WARN:   Xamarin.Insights : at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <0x00027>
undefined   WARN:   Xamarin.Insights : at Java.Lang.Thread/RunnableImplementor.Run () <0x0003f>
undefined   WARN:   Xamarin.Insights : at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <0x0003b>
undefined   WARN:   Xamarin.Insights : at (wrapper dynamic-method) object.81971695-c4eb-4dd7-9e27-0dec45822877 (intptr,intptr) <0x0003b>

undefined   WARN:   art : JNI RegisterNativeMethods: attempt to register 0 native methods for md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable
undefined   DEBUG:  AndroidRuntime : Shutting down VM
undefined   WARN:   System.err : java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
undefined   WARN:   System.err : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
undefined   WARN:   System.err : Caused by: java.lang.reflect.InvocationTargetException
undefined   WARN:   System.err : at java.lang.reflect.Method.invoke(Native Method)
undefined   WARN:   System.err : at java.lang.reflect.Method.invoke(Method.java:372)
undefined   WARN:   System.err : at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
undefined   WARN:   System.err : ... 1 more
undefined   WARN:   System.err : Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.ArgumentException: 'jobject' must not be IntPtr.Zero.
undefined   WARN:   System.err : Parameter name: jobject
undefined   WARN:   System.err : at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
undefined   WARN:   System.err : at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <0x0003f>
undefined   WARN:   System.err : at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <0x00027>
undefined   WARN:   System.err : at Java.Lang.Thread/RunnableImplementor.Run () <0x0003f>
undefined   WARN:   System.err : at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <0x0003b>
undefined   WARN:   System.err : at (wrapper dynamic-method) object.81971695-c4eb-4dd7-9e27-0dec45822877 (intptr,intptr) <0x0003b>
undefined   WARN:   System.err : at mono.java.lang.RunnableImplementor.n_run(Native Method)
undefined   WARN:   System.err : at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)
undefined   WARN:   System.err : at android.os.Handler.handleCallback(Handler.java:739)
undefined   WARN:   System.err : at android.os.Handler.dispatchMessage(Handler.java:95)
undefined   WARN:   System.err : at android.os.Looper.loop(Looper.java:145)
undefined   WARN:   System.err : at android.app.ActivityThread.main(ActivityThread.java:5832)
undefined   WARN:   System.err : ... 4 more
undefined   WARN:   FlurryAgent : Error logged: uncaught
undefined   WARN:   FlurryAgent : Flurry session ended
undefined   ERROR:  AndroidRuntime : FATAL EXCEPTION: main
undefined   ERROR:  AndroidRuntime : Process: com.website.app, PID: 27622
undefined   ERROR:  AndroidRuntime : java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
undefined   ERROR:  AndroidRuntime : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
undefined   ERROR:  AndroidRuntime : Caused by: java.lang.reflect.InvocationTargetException
undefined   ERROR:  AndroidRuntime : at java.lang.reflect.Method.invoke(Native Method)
undefined   ERROR:  AndroidRuntime : at java.lang.reflect.Method.invoke(Method.java:372)
undefined   ERROR:  AndroidRuntime : at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
undefined   ERROR:  AndroidRuntime : ... 1 more
undefined   ERROR:  AndroidRuntime : Caused by: md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable: System.ArgumentException: 'jobject' must not be IntPtr.Zero.
undefined   ERROR:  AndroidRuntime : Parameter name: jobject
undefined   ERROR:  AndroidRuntime : at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x00028>
undefined   ERROR:  AndroidRuntime : at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <0x0003f>
undefined   ERROR:  AndroidRuntime : at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <0x00027>
undefined   ERROR:  AndroidRuntime : at Java.Lang.Thread/RunnableImplementor.Run () <0x0003f>
undefined   ERROR:  AndroidRuntime : at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <0x0003b>
undefined   ERROR:  AndroidRuntime : at (wrapper dynamic-method) object.81971695-c4eb-4dd7-9e27-0dec45822877 (intptr,intptr) <0x0003b>
undefined   ERROR:  AndroidRuntime : at mono.java.lang.RunnableImplementor.n_run(Native Method)
undefined   ERROR:  AndroidRuntime : at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29)
undefined   ERROR:  AndroidRuntime : at android.os.Handler.handleCallback(Handler.java:739)
undefined   ERROR:  AndroidRuntime : at android.os.Handler.dispatchMessage(Handler.java:95)
undefined   ERROR:  AndroidRuntime : at android.os.Looper.loop(Looper.java:145)
undefined   ERROR:  AndroidRuntime : at android.app.ActivityThread.main(ActivityThread.java:5832)
undefined   ERROR:  AndroidRuntime : ... 4 more
undefined   WARN:   ActivityManager : Force finishing activity com.website.app/md599d9a15f782f9118e8e70c354562b227.SuccessPaymentView

undefined   DEBUG:  PowerManagerService : [input device light] setInputDeviceLightOn is called : 1
undefined   WARN:   ActivityManager : Force finishing activity com.website.app/md599d9a15f782f9118e8e70c354562b227.PaymentFormView
undefined   INFO:   SQLiteSecureOpenHelper : getWritableDatabase(pwd)
undefined   INFO:   SQLiteSecureOpenHelper : getDatabaseLocked(b,b,pwd)...

undefined   INFO:   dumpstate : begin

undefined   DEBUG:  StatusBarManagerService : manageDisableList userId=0 what=0x0 pkg=WindowManager.LayoutParams

undefined   INFO:   SurfaceFlinger : id=3018 createSurf (49x49),1 flag=4, Application Error: com.website.app

undefined   DEBUG:  CrashAnrDetector : processName: com.website.app
undefined   DEBUG:  CrashAnrDetector : broadcastEvent : com.website.app data_app_crash
undefined   INFO:   SQLiteSecureOpenHelper : getWritableDatabase(pwd)
undefined   INFO:   SQLiteSecureOpenHelper : getDatabaseLocked(b,b,pwd)...

undefined   WARN:   ContextImpl : Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1643 com.android.server.analytics.data.collection.application.CrashAnrDetector.broadcastEvent:296 com.android.server.analytics.data.collection.application.CrashAnrDetector.processDropBoxEntry:254 com.android.server.analytics.data.collection.application.CrashAnrDetector.access$100:60 com.android.server.analytics.data.collection.application.CrashAnrDetector$1.onReceive:102

undefined   INFO:   WifiStateMachine : CMD_RSSI_POLL : calculateWifiScore in!
undefined   INFO:   WifiStateMachine : CMD_RSSI_POLL : calculateWifiScore out!
undefined   INFO:   WifiStateMachine : CMD_RSSI_POLL : out!

undefined   ERROR:  android.os.Debug : !@Dumpstate > sdumpstate -k -t -z -d -o /data/log/dumpstate_app_error

【问题讨论】:

标签: android xamarin mvvmcross


【解决方案1】:

我遇到了一个非常相似的问题,Android 看似随机地抛出 NullRefenceExceptions(这实际上是因为事情是异步/并发运行的)并且它们永远不会在正确的位置中断,而且 StackTrace 完全没有价值。查看线程和解决方案here

无论如何,让我找出问题的解决方案的两个部分是:

  1. 打开 Visual Studio 中的设置以中断/引发特定异常。为此,请前往this post。该帖子描述了转到 Visual Studio -> 调试 -> 异常...(或 Ctrl + Alt + E

然后,要查找该异常,请展开“公共语言运行时异常”->“系统”->,然后选中“System.ArgumentException”旁边的“抛出”框。现在,它有望在实际发生异常的那一行中断。此外,一旦问题得到解决,您肯定会希望将其关闭,这样您就不会开始遇到您实际上不需要处理的异常。

  1. 覆盖 Android 的异常处理程序事件,称为 UnhandledExceptionRaiser,然后在事件中设置断点,以帮助您在应用程序崩溃之前捕获其中一些异常。活动信息可以在this post 中找到(我最终只是将该活动放入MainActivity.cs

这是我的异常事件代码:

AndroidEnvironment.UnhandledExceptionRaiser += (sender, args) => {
    args.Handled = false;
};

我只是在args.Handled 上放了一个断点并查看详细信息,但您也可以打印出异常或其他内容。

  1. 最后,我自己发现但听到其他人提到的另一件事是,您通常可以通过深入了解异常详细信息并找到 captured_traces 找到更多有用的异常源信息。

要找到它,您需要在异常详细信息窗口中继续展开异常实例的base 属性,直到您位于System.Exception 中。然后按照以下步骤操作(尽管有时您必须在执行以下步骤之前进入内部异常):

System.Exception -> Non-public members -> captured_traces -> 那么你通常想要[0] 但有时还有其他需要查看 -> Non-public members -> frames -> 现在你通常要么想要[0] 或者您想要列表中的最后一个 -> Non-public members -> 最后您将能够在 fileName 属性中看到文件以及在“lineNumber”属性中看到行号(想象一下)。

现在我确信有一种奇特的方法可以通过反射或其他方式提取此信息,而无需挖掘异常细节。如果有人知道怎么做,我很想听听!

【讨论】:

  • 感谢您的回答。这对我们的情况没有帮助。我们通过大量的日志记录设法找到了问题。我们没有找到问题的根源,但找到了这个问题出现的原因。不管怎样,你的回答看起来很有用,我会接受的。
  • @xakz 很高兴听到您发现问题并感谢您接受它。希望它可以帮助某人。
  • @xakz 你会考虑发布原因作为答案,以防它帮助其他人(包括我)解决这个常见问题的一类原因?在此先感谢(头发都不见了)。 :-)
猜你喜欢
  • 2014-12-26
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 2012-06-10
  • 2010-10-12
相关资源
最近更新 更多