Share via

Crash in external code preventing debugging?

Jesse Knott 706 Reputation points
2021-07-06T18:00:37.3+00:00

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.List1[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.ElementChangedEventArgs1[TElement] e) [0x0008e] in <4ddf03d3dc184b718ceb42b3e42ef19a>:0
[ShootersToolbo] java_vm_ext.cc:570] at Xamarin.Forms.Platform.Android.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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.VisualElementRenderer1[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!

Developer technologies | .NET | Xamarin

1 answer

Sort by: Most helpful
  1. Jesse Knott 706 Reputation points
    2021-07-07T22:11:17.25+00:00

    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!

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.