question

JesseKnott-2239 avatar image
0 Votes"
JesseKnott-2239 asked LeonLu-MSFT commented

Crash in external code preventing debugging?

Hello, I have a doozy of a predicament... I've gone through every bit of code I am running and using the broadest try/catch statements I can, and I am still getting an exception when loading a page.
The exception I am getting is

 System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
      Parameter name: index'

and the output in the debug log is just

 **System.ArgumentOutOfRangeException:** 'Index was out of range. Must be non-negative and less than the size of the collection.
 Parameter name: index'

I've been trying to step through the code line by line, but it seems to be occurring after my page has finished loading.

Here is the output I can get from the debugger,


Thread started: <Thread Pool> #29
[ShootersToolbo] java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: JNI NewString called with pending exception android.runtime.JavaProxyThrowable: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
[ShootersToolbo] java_vm_ext.cc:570] Parameter name: index
[ShootersToolbo] java_vm_ext.cc:570] at System.Collections.Generic.List`1[T].get_Item (System.Int32 index) [0x00009] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Collections/Generic/List.cs:161
[ShootersToolbo] java_vm_ext.cc:570] at Com.Syncfusion.Carousel.SfCarousel.RefreshCarousel () [0x00018] in <4ddf03d3dc184b718ceb42b3e42ef19a>:0
[ShootersToolbo] java_vm_ext.cc:570] at Com.Syncfusion.Carousel.SfCarousel.set_ViewMode (Com.Syncfusion.Carousel.ViewMode value) [0x0001b] in <4ddf03d3dc184b718ceb42b3e42ef19a>:0
[ShootersToolbo] java_vm_ext.cc:570] at Syncfusion.SfCarousel.XForms.Droid.SfCarouselMapping.OnCarouselPropertiesChanged (System.String propertyName, Syncfusion.SfCarousel.XForms.SfCarousel formsCarousel, Com.Syncfusion.Carousel.SfCarousel nativeCarousel) [0x0041a] in <4ddf03d3dc184b718ceb42b3e42ef19a>:0
[ShootersToolbo] java_vm_ext.cc:570] at Syncfusion.SfCarousel.XForms.Droid.SfCarouselRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1[TElement] e) [0x0008e] in <4ddf03d3dc184b718ceb42b3e42ef19a>:0
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000cb] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:241
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:131
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0003e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:358
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000b3] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:140
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00163] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:351
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:112
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:481
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000e8] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:244
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:131
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0003e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:358
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000b3] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:140
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00163] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:351
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:112
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:481
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000e8] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:244
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:131
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0003e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:358
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.ScrollViewContainer.set_ChildView (Xamarin.Forms.View value) [0x0002f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewContainer.cs:35
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.ScrollViewRenderer.LoadContent () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewRenderer.cs:369
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.ScrollViewRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x000cf] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ScrollViewRenderer.cs:99
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0003e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:358
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000b3] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:140
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00163] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:351
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:112
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:481
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000e8] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:244
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:131
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Content.Context context) [0x0003e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:358
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x000b3] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:140
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00163] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:351
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:112
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:481
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000e8] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:244
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:131
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, AndroidX.Fragment.App.FragmentManager fragmentManager, Android.Content.Context context) [0x00031] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:404
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.AppCompat.FragmentContainer.OnCreateView (Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState) [0x00008] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FragmentContainer.cs:57
[ShootersToolbo] java_vm_ext.cc:570] at AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_inflater, System.IntPtr native_container, System.IntPtr native_savedInstanceState) [0x00021] in /Users/runner/work/1/s/generated/androidx.fragment.fragment/obj/Release/monoandroid9.0/generated/src/AndroidX.Fragment.App.Fragment.cs:1977
[ShootersToolbo] java_vm_ext.cc:570] at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.55(intptr,intptr,intptr,intptr,intptr)
[ShootersToolbo] java_vm_ext.cc:570] at android.view.View crc64720bb2db43a66fe9.FragmentContainer.n_onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (FragmentContainer.java:-2)
[ShootersToolbo] java_vm_ext.cc:570] at android.view.View crc64720bb2db43a66fe9.FragmentContainer.onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (FragmentContainer.java:41)
[ShootersToolbo] java_vm_ext.cc:570] at void androidx.fragment.app.Fragment.performCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) (Fragment.java:2963)
[ShootersToolbo] java_vm_ext.cc:570] at void androidx.fragment.app.FragmentStateManager.createView() (FragmentStateManager.java:518)
[ShootersToolbo] java_vm_ext.cc:570] at void androidx.fragment.app.FragmentStateManager.moveToExpectedState() (FragmentStateManager.java:282)
[ShootersToolbo] java_vm_ext.cc:570] at void androidx.fragment.app.FragmentManager.executeOpsTogether(java.util.ArrayList, java.util.ArrayList, int, int) (FragmentManager.java:2189)
[ShootersToolbo] java_vm_ext.cc:570] at void androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(java.util.ArrayList, java.util.ArrayList) (FragmentManager.java:2100)
[ShootersToolbo] java_vm_ext.cc:570] at boolean androidx.fragment.app.FragmentManager.execPendingActions(boolean) (FragmentManager.java:2002)
[ShootersToolbo] java_vm_ext.cc:570] at void androidx.fragment.app.FragmentManager$5.run() (FragmentManager.java:524)
[ShootersToolbo] java_vm_ext.cc:570] at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:883)
[ShootersToolbo] java_vm_ext.cc:570] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:100)
[ShootersToolbo] java_vm_ext.cc:570] at void android.os.Looper.loop() (Looper.java:214)
[ShootersToolbo] java_vm_ext.cc:570] at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7356)
[ShootersToolbo] java_vm_ext.cc:570] at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
[ShootersToolbo] java_vm_ext.cc:570] at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:492)
[ShootersToolbo] java_vm_ext.cc:570] at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:930)
[ShootersToolbo] java_vm_ext.cc:570]
[ShootersToolbo] java_vm_ext.cc:570] in call to NewString
[ShootersToolbo] java_vm_ext.cc:570] from android.view.View crc64720bb2db43a66fe9.FragmentContainer.n_onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
[ShootersToolbo] runtime.cc:630] Runtime aborting...

Not sure what is going on here, it's definitely not in my code, but I don't know what I can do to fix this?

Cheers!

dotnet-xamarin
· 2
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

First of all, you should know length of your ObservableCollection, you can add a breakpoint in this line (have exception), check the index if is over that the length of ObservableCollection. If you do not know how to achieve it, you can post a demo, I will help you to troubleshot this issue.

1 Vote 1 ·

Thank you for the offer! I appreciate it! I think I may have fixed this (using your hint towards it being in how I handle my ObservableCollections). Please take a look at my next post, and let me know if I am on the right track or not.

Cheers!

0 Votes 0 ·

1 Answer

JesseKnott-2239 avatar image
0 Votes"
JesseKnott-2239 answered LeonLu-MSFT commented

Well, I've gone through and added more checks and validation code to what I believe could be the offending code,
I've made a few changes at once, so I am not sure what did the trick, but here are the changes I've made, and I haven't seen the crash since then

In the data model that creates the ObservableCollection, I changed the getter from

    `get => photos ?? new ObservableCollection<Photo>();`

to this

     get
         {
             try
             {
                 return photos;
             }
             catch (Exception ex)
             {
                 DebugTools.LogException(ex);
             }
             return new ObservableCollection<Photos>();
         }

From what I could tell from the call stack there, it has to do with a carousel that I use to display images, and respond to clicks.
Here is the code I use in a converter to get the image from a personal datamodel I use

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
App.Current.Resources.TryGetValue("icoCamera", out object objCamera);
ImageSource imgSrc = objCamera.ToString();

             byte[] byteImage = null;

             
             if (value != null && value.GetType() == typeof(ObservableCollection<Photos>))
             {
                 try
                 {
                     if (((ObservableCollection<Photos>)value)?.Count > 0)
                     {
                         byteImage = ((ObservableCollection<Photos>)value)?.FirstOrDefault(x => x.KeyImage.Equals(1))?.Image ?? ((ObservableCollection<Photos>)value)?[0]?.Image;
                     }
                 }
                 catch (Exception ex)
                 {
                     DebugTools.LogException(ex);
                 }
             }
             else if (value != null && value.GetType() == typeof(Photos))
             {
                 byteImage = ((Photos)value).Image;
             }
             else if (value != null && value.GetType() == typeof(byte[]))
             {
                 byteImage = (byte[])value;
             }

             if (byteImage != null)
             {
                 imgSrc = ImageSource.FromStream(() =>
                 {
                     try
                     {
                         return new MemoryStream(byteImage);
                     }
                     catch (Exception ex)
                     {
                         DebugTools.LogException(ex);
                     }
                     return null;
                 });
             }
             return imgSrc;
         }
         catch (Exception ex)
         {
             DebugTools.LogException(ex);
             // Causes unhandled exception... November Sierra cupcake
             // throw;
         }
         return null;
     }

Here's the weird part, the only code that changed in the converter is that I moved the sanity check up one level, so this

      if (value != null && value.GetType() == typeof(ObservableCollection<Photos>) && ((ObservableCollection<Photos>)value).Count > 0)
             {
                 try
                 {
                     byteImage = ((ObservableCollection<Photos>)value)?.FirstOrDefault(x => x.KeyImage.Equals(1))?.Image ?? ((ObservableCollection<Photos>)value)?[0]?.Image;
                 }


became this.

if (value != null && value.GetType() == typeof(ObservableCollection<Photos>) && ((ObservableCollection<Photos>)value).Count > 0)
{
try
{
byteImage = ((ObservableCollection<Photos>)value)?.FirstOrDefault(x => x.KeyImage.Equals(1))?.Image ?? ((ObservableCollection<Photos>)value)?[0]?.Image;
}

I don't know which of those two fixed it, but it does indeed appear to be fixed, so I am going to call good enough alone LOL.

I could be creating a new problem by breaking some other standard or logic, so if anything looks horribly out of place, or unnecessary, please let me know!

I think I however will work on migrating my other DataMembers that use ObservableCollections to use the model changes I used above, just to make sure they don't exhibit similar issues down the road.

Thanks for taking a look, and for the help!

Cheers!

· 3
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Great, thanks for your sharing.

1 Vote 1 ·

Definitely! I figure that sharing how I fix things both gives the opportunity to help someone else, but also a chance for someone to catch a mistake or bug in my fix to let me know I'm creating more problems than fixing.
Thanks again for the help!

0 Votes 0 ·

You are welcome.

0 Votes 0 ·