Random System.ArgumentException: 'jobject' must not be IntPtr.Zero

痴心易碎 提交于 2019-12-10 17:31:54

问题


We have random System.ArgumentException with Xamarin on android. It is completely random - it can occur anytime and anywhere, on any platform. We registered it on 5.1, 5.0, 4.4.4.

It has no adequate stacktrace, it has no place where it thrown, I can't catch it with anything. I think it might be somehow related to async void, we use MVVMCross in the project and there are many async void Init and async void DoMvxCommand methods. But all of them enclosed in try-catch blocks.

I crucially need any advice how to fix or at least find the reason of this crash. Here is the latest crash log

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

回答1:


I had a very similar issue with Android throwing NullRefenceExceptions seemingly randomly (which was actually because things were running asynchronously/concurrently) and they would never break at the correct spot and the StackTrace was completely worthless. See the thread and solution here.

Anyway, 2 parts of the solution that allowed me to figure out the issue were:

  1. Turn on the setting in Visual Studio in order to break/throw on the specific exception. To do this, head to this post. The post describes going to Visual Studio -> Debug -> Exceptions... (or Ctrl + Alt + E)

Then, to find that exception, expand 'Common Language Runtime Exceptions' -> 'System' -> then check the 'Thrown' box next 'System.ArgumentException'. Now it will, hopefully, break on the line where that exception actually happens. Also you will definitely want to turn this off once the issue has been fixed so that you do not start hitting exceptions that you do not really need to handle.

  1. Override Android's exception handler event, called UnhandledExceptionRaiser, and then set a breakpoint within the event in order to help you catch some of these exceptions before your app crashes. The event info can be found in this post (I ended up just putting that event into MainActivity.cs.

Here is my exception event code:

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

I just put a break point on args.Handled and look through the details but you could also print out the exception or something.

  1. Finally, one more thing that I found on my own but have heard others mention, is that you can usually find more helpful exception source info by digging into the exception details and finding captured_traces.

To find this, you need to keep expanding the exception instance's base property, in the exception details window, until you are in System.Exception. Then follow the steps below (though sometimes you have to go into the inner exception before following the below steps):

System.Exception -> Non-public members -> captured_traces -> then you usually want [0] but sometimes there are others to look through -> Non-public members -> frames -> now you usually either want [0] or you want the last one in the list -> Non-public members -> and finally you will be able to see the file in the fileName property and the line number in the 'lineNumber' property (imagine that).

Now I am sure there is a fancy way to extract this info with reflection or something without digging through the exception details. If anyone knowns how, I would love to hear it!



来源:https://stackoverflow.com/questions/32654645/random-system-argumentexception-jobject-must-not-be-intptr-zero

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!