Skip to content

Commit 391c9a9

Browse files
committed
1. Disable symdb compression
2. Do not use LD in ER 3. Fix OutOfRange in SymDB
1 parent aaaf963 commit 391c9a9

File tree

5 files changed

+30
-25
lines changed

5 files changed

+30
-25
lines changed

tracer/src/Datadog.Trace/Debugger/DebuggerSettings.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public DebuggerSettings(IConfigurationSource? source, IConfigurationTelemetry te
124124
.AsInt32(DefaultCodeOriginExitSpanFrames, frames => frames > 0)
125125
.Value;
126126

127-
SymbolDatabaseCompressionEnabled = config.WithKeys(ConfigurationKeys.Debugger.SymbolDatabaseCompressionEnabled).AsBool(true);
127+
SymbolDatabaseCompressionEnabled = config.WithKeys(ConfigurationKeys.Debugger.SymbolDatabaseCompressionEnabled).AsBool(false);
128128
}
129129

130130
public bool Enabled { get; }

tracer/src/Datadog.Trace/Debugger/ExceptionAutoInstrumentation/FrameFilter.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Reflection;
88
using System.Reflection.Emit;
99
using Datadog.Trace.Debugger.Symbols;
10+
using Datadog.Trace.VendoredMicrosoftCode.System.Collections.Immutable;
1011

1112
#nullable enable
1213
namespace Datadog.Trace.Debugger.ExceptionAutoInstrumentation
@@ -64,7 +65,7 @@ internal static bool IsBlockList(MethodBase method)
6465
return true;
6566
}
6667

67-
return AssemblyFilter.ShouldSkipAssembly(method.Module.Assembly, LiveDebugger.Instance.Settings.ThirdPartyDetectionExcludes, LiveDebugger.Instance.Settings.ThirdPartyDetectionIncludes);
68+
return AssemblyFilter.ShouldSkipAssembly(method.Module.Assembly, ImmutableHashSet<string>.Empty, ImmutableHashSet<string>.Empty);
6869
}
6970

7071
internal static bool ShouldSkipNamespaceIfOnTopOfStack(MethodBase method)

tracer/src/Datadog.Trace/Debugger/Symbols/SymbolExtractor.cs

+24-20
Original file line numberDiff line numberDiff line change
@@ -683,46 +683,50 @@ void PopulateClosureMethod(MethodDefinition generatedMethod, TypeDefinition owne
683683
return [new Symbol { Name = "this", SymbolType = SymbolType.Arg, Line = UnknownFieldAndArgLine, Type = method.GetDeclaringType().FullName(MetadataReader) }];
684684
}
685685

686-
var argsSymbol = CreateArgSymbolArray(method, parameters);
686+
var argsSymbol = method.IsStaticMethod() ? new Symbol[parameters.Count] : new Symbol[parameters.Count + 1]; // 'this'
687687
int index = 0;
688688
var methodSig = method.DecodeSignature(new TypeProvider(false), 0);
689-
var paramTypesMatchArgSymbols = methodSig.ParameterTypes.Length == argsSymbol.Length || methodSig.ParameterTypes.Length == argsSymbol.Length - 1;
689+
var typesIndex = 0;
690+
if (!method.IsStaticMethod())
691+
{
692+
var thisSymbol = new Symbol { Name = "this", SymbolType = SymbolType.Arg, Line = UnknownFieldAndArgLine, Type = method.GetDeclaringType().FullName(MetadataReader) };
693+
argsSymbol[0] = thisSymbol;
694+
index++;
695+
}
696+
690697
foreach (var parameterHandle in parameters)
691698
{
699+
if (parameterHandle.IsNil)
700+
{
701+
continue;
702+
}
703+
692704
var parameterDef = MetadataReader.GetParameter(parameterHandle);
693-
if (index == 0 && !method.IsStaticMethod())
705+
var parameterName = MetadataReader.GetString(parameterDef.Name);
706+
if (string.IsNullOrEmpty(parameterName))
694707
{
695-
argsSymbol[index] = new Symbol { Name = "this", SymbolType = SymbolType.Arg, Line = UnknownFieldAndArgLine, Type = method.GetDeclaringType().FullName(MetadataReader) };
696-
index++;
708+
continue;
709+
}
697710

698-
if (parameterDef.IsHiddenThis())
699-
{
700-
continue;
701-
}
711+
if (parameterDef.IsHiddenThis())
712+
{
713+
continue;
702714
}
703715

704716
argsSymbol[index] = new Symbol
705717
{
706-
Name = MetadataReader.GetString(parameterDef.Name),
718+
Name = parameterName,
707719
SymbolType = SymbolType.Arg,
708720
Line = UnknownFieldAndArgLine,
709-
Type = paramTypesMatchArgSymbols ? methodSig.ParameterTypes[parameterDef.IsHiddenThis() ? index : index - 1] : "Unknown"
721+
Type = typesIndex < methodSig.ParameterTypes.Length ? methodSig.ParameterTypes[typesIndex] : "Unknown"
710722
};
711723
index++;
724+
typesIndex++;
712725
}
713726

714727
return argsSymbol;
715728
}
716729

717-
private Symbol[] CreateArgSymbolArray(MethodDefinition method, ParameterHandleCollection parameters)
718-
{
719-
// ReSharper disable once NotDisposedResource
720-
return method.IsStaticMethod() ?
721-
new Symbol[parameters.Count] :
722-
MetadataReader.GetParameter(parameters.GetEnumerator().Current).IsHiddenThis() ?
723-
new Symbol[parameters.Count] : new Symbol[parameters.Count + 1];
724-
}
725-
726730
private string[]? GetClassBaseClassNames(TypeDefinition type)
727731
{
728732
EntityHandle? baseType = type.BaseType;

tracer/src/Datadog.Trace/Debugger/Upload/SymbolUploadApi.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ private SymbolUploadApi(
3838
{
3939
_apiRequestFactory = apiRequestFactory;
4040
_eventMetadata = eventMetadata;
41-
_enableCompression = enableCompression;
41+
_enableCompression = false; //enableCompression;
4242
discoveryService.SubscribeToChanges(c => Endpoint = c.SymbolDbEndpoint);
4343
}
4444

@@ -94,7 +94,7 @@ public override async Task<bool> SendBatchAsync(ArraySegment<byte> symbols)
9494
using var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress);
9595
await gzipStream.WriteAsync(symbols.Array, 0, symbols.Array.Length).ConfigureAwait(false);
9696
#endif
97-
symbolsItem = new MultipartFormItem("file", "gzip", "file.gz", new ArraySegment<byte>(memoryStream.ToArray()));
97+
symbolsItem = new MultipartFormItem("file", "application/gzip", "file.gz", new ArraySegment<byte>(memoryStream.ToArray()));
9898
}
9999
else
100100
{

tracer/src/Datadog.Trace/PDBs/DatadogMetadataReader.Dnlib.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private CustomDebugInfoAsyncAndClosure GetAsyncAndClosureCustomDebugInfoDnlib(in
212212
{
213213
cdiAsyncAndClosure.EncLambdaAndClosureMap = true;
214214
}
215-
else if (methodCustomDebugInfo.Kind is PdbCustomDebugInfoKind.StateMachineHoistedLocalScopes)
215+
else if (methodCustomDebugInfo.Kind is PdbCustomDebugInfoKind.AsyncMethod)
216216
{
217217
cdiAsyncAndClosure.StateMachineHoistedLocal = true;
218218
cdiAsyncAndClosure.StateMachineKickoffMethodRid = (int)((PdbAsyncMethodCustomDebugInfo)methodCustomDebugInfo).KickoffMethod.MDToken.Rid;

0 commit comments

Comments
 (0)