From 83ec62138635b7465c0152a92e580b1905b8f79f Mon Sep 17 00:00:00 2001 From: dudik Date: Wed, 21 May 2025 14:43:38 +0200 Subject: [PATCH 1/3] fix type handle mismatch when resolving attribute type in code origin for entry span --- .../SpanCodeOrigin/EndpointDetector.cs | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs b/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs index 5f138b4e3bce..830d6e8852bf 100644 --- a/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs +++ b/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs @@ -181,21 +181,38 @@ private static bool HasAttributeFromSet(CustomAttributeHandleCollection attribut { string fullName; var attribute = reader.GetCustomAttribute(attributeHandle); - if (attribute.Constructor.Kind == HandleKind.MemberReference) + switch (attribute.Constructor.Kind) { - var ctor = reader.GetMemberReference((MemberReferenceHandle)attribute.Constructor); - var attributeType = reader.GetTypeReference((TypeReferenceHandle)ctor.Parent); - fullName = GetFullTypeName(attributeType.Namespace, attributeType.Name, reader); - } - else if (attribute.Constructor.Kind == HandleKind.MethodDefinition) - { - var ctor = reader.GetMethodDefinition((MethodDefinitionHandle)attribute.Constructor); - var attributeType = reader.GetTypeDefinition(ctor.GetDeclaringType()); - fullName = GetFullTypeName(attributeType.Namespace, attributeType.Name, reader); - } - else - { - continue; + case HandleKind.MemberReference: + { + var ctor = reader.GetMemberReference((MemberReferenceHandle)attribute.Constructor); + switch (ctor.Parent.Kind) + { + case HandleKind.TypeReference: + var tr = reader.GetTypeReference((TypeReferenceHandle)ctor.Parent); + fullName = GetFullTypeName(tr.Namespace, tr.Name, reader); + break; + + case HandleKind.TypeDefinition: + var td = reader.GetTypeDefinition((TypeDefinitionHandle)ctor.Parent); + fullName = GetFullTypeName(td.Namespace, td.Name, reader); + break; + + default: + continue; + } + + break; + } + case HandleKind.MethodDefinition: + { + var ctor = reader.GetMethodDefinition((MethodDefinitionHandle)attribute.Constructor); + var td = reader.GetTypeDefinition(ctor.GetDeclaringType()); + fullName = GetFullTypeName(td.Namespace, td.Name, reader); + break; + } + default: + continue; } if (attributeNames.Contains(fullName)) From 5c4281e6ed30b690b80627012104b84bf9777d20 Mon Sep 17 00:00:00 2001 From: dudik Date: Wed, 21 May 2025 14:52:03 +0200 Subject: [PATCH 2/3] fix error message --- .../Debugger/SpanCodeOrigin/SpanCodeOriginManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/SpanCodeOriginManager.cs b/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/SpanCodeOriginManager.cs index 77b0d99d0523..d9bd52888e6a 100644 --- a/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/SpanCodeOriginManager.cs +++ b/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/SpanCodeOriginManager.cs @@ -148,7 +148,7 @@ private void AddEntrySpanTags(Span span, Type type, MethodInfo method) } catch (Exception ex) { - Log.Error(ex, "Failed to load PDB info for assembly {AssemblyName}", asm.Location); + Log.Error(ex, "Error while getting endpoints for assembly: {AssemblyName}", asm.Location); return null; } }); From 4642854638078a0b85f6f121fa45b253805e8d21 Mon Sep 17 00:00:00 2001 From: dudik Date: Fri, 23 May 2025 20:35:04 +0200 Subject: [PATCH 3/3] fix build --- .../Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs b/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs index 830d6e8852bf..6642d5b89e28 100644 --- a/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs +++ b/tracer/src/Datadog.Trace/Debugger/SpanCodeOrigin/EndpointDetector.cs @@ -204,6 +204,7 @@ private static bool HasAttributeFromSet(CustomAttributeHandleCollection attribut break; } + case HandleKind.MethodDefinition: { var ctor = reader.GetMethodDefinition((MethodDefinitionHandle)attribute.Constructor); @@ -211,6 +212,7 @@ private static bool HasAttributeFromSet(CustomAttributeHandleCollection attribut fullName = GetFullTypeName(td.Namespace, td.Name, reader); break; } + default: continue; }