From 7260bdea2946fc2e20ddedf510aafb34151e8ae8 Mon Sep 17 00:00:00 2001 From: Matan Green Date: Tue, 23 Jan 2024 11:36:11 +0200 Subject: [PATCH] Fixed IndexOutOfBoundException that was thrown in Async Method scenarios when there was no PDB --- .../Expressions/MethodScopeMembers.cs | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs b/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs index 15cddc2559c0..d56bdc040cab 100644 --- a/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs +++ b/tracer/src/Datadog.Trace/Debugger/Expressions/MethodScopeMembers.cs @@ -4,6 +4,7 @@ // using System; +using System.Collections.Generic; #if NET6_0_OR_GREATER using System.Buffers; #endif @@ -12,23 +13,24 @@ namespace Datadog.Trace.Debugger.Expressions; internal class MethodScopeMembers { - private int _index; + private List _growingScopeMembers; internal MethodScopeMembers(int numberOfLocals, int numberOfArguments) { - // 2 for 'return' and 'exception' -#if NET6_0_OR_GREATER - Members = ArrayPool.Shared.Rent(numberOfLocals + numberOfArguments + 2); -#else - Members = new ScopeMember[numberOfLocals + numberOfArguments + 2]; -#endif + _growingScopeMembers = new List(); Exception = null; Return = default; InvocationTarget = default; } // ReSharper disable once AutoPropertyCanBeMadeGetOnly.Local - internal ScopeMember[] Members { get; private set; } + internal ScopeMember[] Members + { + get + { + return _growingScopeMembers.ToArray(); + } + } internal Exception Exception { get; set; } @@ -42,17 +44,11 @@ internal MethodScopeMembers(int numberOfLocals, int numberOfArguments) internal void AddMember(ScopeMember member) { - Members[_index] = member; - _index++; + _growingScopeMembers.Add(member); } internal void Dispose() { -#if NET6_0_OR_GREATER - ArrayPool.Shared.Return(Members); - -#else - Members = null; -#endif + _growingScopeMembers = null; } }