Skip to content

Commit 9200c1b

Browse files
committed
Fix symbols with missing properties
1 parent 4148977 commit 9200c1b

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

tracer/src/Datadog.Trace/Debugger/Symbols/Model/Scope.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal record struct Scope
1414
{
1515
[JsonProperty("scope_type")]
1616
[JsonConverter(typeof(StringEnumConverter), converterParameters: typeof(SnakeCaseNamingStrategy))]
17-
internal ScopeType ScopeType { get; set; }
17+
internal ScopeType? ScopeType { get; set; }
1818

1919
[JsonProperty("name")]
2020
internal string? Name { get; set; }

tracer/src/Datadog.Trace/Debugger/Symbols/Model/Symbol.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ internal record struct Symbol
2020

2121
[JsonProperty("symbol_type")]
2222
[JsonConverter(typeof(StringEnumConverter), converterParameters: typeof(SnakeCaseNamingStrategy))]
23-
internal SymbolType SymbolType { get; set; }
23+
internal SymbolType? SymbolType { get; set; }
2424

2525
[JsonProperty("line")]
26-
internal int Line { get; set; }
26+
internal int? Line { get; set; }
2727

2828
[JsonProperty("language_specifics")]
2929
internal LanguageSpecifics? LanguageSpecifics { get; set; }

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

+12-1
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,11 @@ private Symbol[] GetFieldSymbols(FieldDefinitionHandleCollection fieldsCollectio
408408
}
409409

410410
var fieldName = Datadog.Trace.VendoredMicrosoftCode.System.MemoryExtensions.AsSpan(MetadataReader.GetString(fieldDef.Name));
411+
if (fieldName.IsEmpty)
412+
{
413+
continue;
414+
}
415+
411416
if (fieldName[0] == '<')
412417
{
413418
// properties
@@ -418,13 +423,19 @@ private Symbol[] GetFieldSymbols(FieldDefinitionHandleCollection fieldsCollectio
418423
}
419424
}
420425

426+
var fieldNameAsString = fieldName.ToString();
427+
if (string.IsNullOrEmpty(fieldNameAsString))
428+
{
429+
continue;
430+
}
431+
421432
var accessModifiers = (fieldDef.Attributes & System.Reflection.FieldAttributes.FieldAccessMask) > 0 ? new[] { MethodAccess[Convert.ToUInt16(fieldDef.Attributes & System.Reflection.FieldAttributes.FieldAccessMask)] } : null;
422433
var fieldAttributes = ((int)fieldDef.Attributes & 0x0070) > 0 ? new[] { FieldAttributes[Convert.ToUInt16((int)fieldDef.Attributes & 0x0070)] } : null;
423434
var ls = new LanguageSpecifics() { AccessModifiers = accessModifiers, Annotations = fieldAttributes };
424435

425436
fieldSymbols[index] = new Symbol
426437
{
427-
Name = fieldName.ToString(),
438+
Name = fieldNameAsString,
428439
Type = fieldTypeName,
429440
SymbolType = ((fieldDef.Attributes & System.Reflection.FieldAttributes.Static) != 0) ? SymbolType.StaticField : SymbolType.Field,
430441
Line = UnknownFieldAndArgLine,

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

+15-1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ protected override bool TryCreateMethodScopeForGeneratedMethod(MethodDefinition
157157
foreach (var fieldHandle in fields)
158158
{
159159
var field = MetadataReader.GetFieldDefinition(fieldHandle);
160+
if (field.Name.IsNil)
161+
{
162+
continue;
163+
}
164+
160165
var fieldName = MetadataReader.GetString(field.Name);
161166
var span = Datadog.Trace.VendoredMicrosoftCode.System.MemoryExtensions.AsSpan(fieldName);
162167
if (Datadog.Trace.VendoredMicrosoftCode.System.MemoryExtensions.IndexOf(span, generatedClassPrefix, StringComparison.Ordinal) == 0)
@@ -171,7 +176,7 @@ protected override bool TryCreateMethodScopeForGeneratedMethod(MethodDefinition
171176
}
172177

173178
var localName = Datadog.Trace.VendoredMicrosoftCode.System.MemoryExtensions.AsSpan(MetadataReader.GetString(field.Name));
174-
if (localName[0] != '<')
179+
if (localName.IsEmpty || localName[0] != '<')
175180
{
176181
continue;
177182
}
@@ -183,6 +188,10 @@ protected override bool TryCreateMethodScopeForGeneratedMethod(MethodDefinition
183188
}
184189

185190
var name = localName.ToString();
191+
if (string.IsNullOrEmpty(name))
192+
{
193+
continue;
194+
}
186195

187196
if (IsArgument(methodScope.Symbols, name, type))
188197
{
@@ -229,6 +238,11 @@ protected override bool TryCreateMethodScopeForGeneratedMethod(MethodDefinition
229238
foreach (var local in localScope.Locals)
230239
{
231240
var nameAsSpan = Datadog.Trace.VendoredMicrosoftCode.System.MemoryExtensions.AsSpan(local.Name);
241+
if (nameAsSpan.IsEmpty)
242+
{
243+
continue;
244+
}
245+
232246
if (Datadog.Trace.VendoredMicrosoftCode.System.MemoryExtensions.IndexOf(nameAsSpan, generatedClassPrefix, StringComparison.Ordinal) > 0)
233247
{
234248
var cdi = DatadogMetadataReader.GetAsyncAndClosureCustomDebugInfo(rowId);

0 commit comments

Comments
 (0)