Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

chore: align StackFrame's properties #2691

Merged
merged 2 commits into from
Oct 3, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ API Changes:
- ISpanContext was removed. Use ITraceContext instead. ([#2668](https://github.com/getsentry/sentry-dotnet/pull/2668))
- Removed IHasTransactionNameSource. Use ITransactionContext instead. ([#2654](https://github.com/getsentry/sentry-dotnet/pull/2654))
- Adding `Distribution` to `IEventLike` ([#2660](https://github.com/getsentry/sentry-dotnet/pull/2660))
- Removed unused `StackFrame.InstructionOffset`. ([#2691](https://github.com/getsentry/sentry-dotnet/pull/2691))
- Change `StackFrame`'s `ImageAddress`, `InstructionAddress` and `FunctionId` to `long?`. ([#2691](https://github.com/getsentry/sentry-dotnet/pull/2691))

## Unreleased

Expand Down
6 changes: 1 addition & 5 deletions src/Sentry.Profiling/SampleProfileBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,11 +178,7 @@ private SentryStackFrame CreateStackFrame(CodeAddressIndex codeAddressIndex)
}

// TODO enable this once we implement symbolication (we will need to send debug_meta too), see StackTraceFactory.
// if (_traceLog.CodeAddresses.ILOffset(codeAddressIndex) is { } ilOffset && ilOffset >= 0)
// {
// frame.InstructionOffset = ilOffset;
// }
// else if (_traceLog.CodeAddresses.Address(codeAddressIndex) is { } address)
// if (_traceLog.CodeAddresses.Address(codeAddressIndex) is { } address)
// {
// frame.InstructionAddress = $"0x{address:x}";
// }
Expand Down
5 changes: 2 additions & 3 deletions src/Sentry/Internal/DebugStackTrace.cs
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,7 @@ private SentryStackFrame InternalCreateFrame(StackFrame stackFrame, bool demangl
// See https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/metadata/cortokentype-enumeration
if (tokenType == 0x06000000) // CorTokenType.mdtMethodDef
{
var recordId = token & 0x00ffffff;
frame.FunctionId = $"0x{recordId:x}";
frame.FunctionId = token & 0x00ffffff;
}
}
catch (InvalidOperationException)
Expand Down Expand Up @@ -261,7 +260,7 @@ private SentryStackFrame InternalCreateFrame(StackFrame stackFrame, bool demangl
var ilOffset = stackFrame.GetILOffset();
if (ilOffset != StackFrame.OFFSET_UNKNOWN)
{
frame.InstructionAddress = $"0x{ilOffset:x}";
frame.InstructionAddress = ilOffset;
}

var lineNo = stackFrame.GetFileLineNumber();
Expand Down
8 changes: 4 additions & 4 deletions src/Sentry/Internal/Extensions/JsonExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ internal static void ResetSerializerOptions()
.AddDefaultConverters();

AltSerializerOptions = new JsonSerializerOptions
{
ReferenceHandler = ReferenceHandler.Preserve
}
{
ReferenceHandler = ReferenceHandler.Preserve
}
.AddDefaultConverters();
}

Expand Down Expand Up @@ -183,7 +183,7 @@ public static void Deconstruct(this JsonProperty jsonProperty, out string name,
return double.Parse(json.ToString()!, CultureInfo.InvariantCulture);
}

public static long? GetAddressAsLong(this JsonElement json)
public static long? GetHexAsLong(this JsonElement json)
{
// If the address is in json as a number, we can just use it.
if (json.ValueKind == JsonValueKind.Number)
Expand Down
44 changes: 12 additions & 32 deletions src/Sentry/SentryStackFrame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public sealed class SentryStackFrame : IJsonSerializable
/// Optionally an address of the debug image to reference.
/// If this is set and a known image is defined by debug_meta then symbolication can take place.
/// </summary>
public long ImageAddress { get; set; }
public long? ImageAddress { get; set; }

/// <summary>
/// An optional address that points to a symbol.
Expand All @@ -116,20 +116,9 @@ public sealed class SentryStackFrame : IJsonSerializable

/// <summary>
/// An optional instruction address for symbolication.<br/>
/// This should be a string with a hexadecimal number that includes a <b>0x</b> prefix.<br/>
/// If this is set and a known image is defined in the <see href="https://develop.sentry.dev/sdk/event-payloads/debugmeta/">Debug Meta Interface</see>, then symbolication can take place.<br/>
/// </summary>
public string? InstructionAddress { get; set; }

/// <summary>
/// The instruction offset.
/// </summary>
/// <remarks>
/// The official docs refer to it as 'The difference between instruction address and symbol address in bytes.'
/// In .NET this means the IL Offset within the assembly.
/// </remarks>
[Obsolete("This property is unused and will be removed in the future.")]
public long? InstructionOffset { get; set; }
public long? InstructionAddress { get; set; }

/// <summary>
/// Optionally changes the addressing mode. The default value is the same as
Expand All @@ -141,11 +130,9 @@ public sealed class SentryStackFrame : IJsonSerializable

/// <summary>
/// The optional Function Id.<br/>
/// This is derived from the `MetadataToken`, and should be the record id
/// of a `MethodDef`.<br/>
/// This should be a string with a hexadecimal number that includes a <b>0x</b> prefix.<br/>
/// This is derived from the `MetadataToken`, and should be the record id of a `MethodDef`.
/// </summary>
public string? FunctionId { get; set; }
public long? FunctionId { get; set; }

/// <inheritdoc />
public void WriteTo(Utf8JsonWriter writer, IDiagnosticLogger? logger)
Expand All @@ -166,14 +153,11 @@ public void WriteTo(Utf8JsonWriter writer, IDiagnosticLogger? logger)
writer.WriteBooleanIfNotNull("in_app", InApp);
writer.WriteStringIfNotWhiteSpace("package", Package);
writer.WriteStringIfNotWhiteSpace("platform", Platform);
writer.WriteStringIfNotWhiteSpace("image_addr", ImageAddress.NullIfDefault()?.ToHexString());
writer.WriteStringIfNotWhiteSpace("symbol_addr", SymbolAddress?.ToHexString());
writer.WriteStringIfNotWhiteSpace("instruction_addr", InstructionAddress);
#pragma warning disable 0618
writer.WriteNumberIfNotNull("instruction_offset", InstructionOffset);
#pragma warning restore 0618
writer.WriteStringIfNotWhiteSpace("image_addr", ImageAddress?.NullIfDefault()?.ToHexString());
writer.WriteStringIfNotWhiteSpace("symbol_addr", SymbolAddress?.NullIfDefault()?.ToHexString());
writer.WriteStringIfNotWhiteSpace("instruction_addr", InstructionAddress?.ToHexString());
writer.WriteStringIfNotWhiteSpace("addr_mode", AddressMode);
writer.WriteStringIfNotWhiteSpace("function_id", FunctionId);
writer.WriteStringIfNotWhiteSpace("function_id", FunctionId?.ToHexString());

writer.WriteEndObject();
}
Expand Down Expand Up @@ -240,12 +224,11 @@ public static SentryStackFrame FromJson(JsonElement json)
var inApp = json.GetPropertyOrNull("in_app")?.GetBoolean();
var package = json.GetPropertyOrNull("package")?.GetString();
var platform = json.GetPropertyOrNull("platform")?.GetString();
var imageAddress = json.GetPropertyOrNull("image_addr")?.GetAddressAsLong() ?? 0;
var symbolAddress = json.GetPropertyOrNull("symbol_addr")?.GetAddressAsLong();
var instructionAddress = json.GetPropertyOrNull("instruction_addr")?.GetString();
var instructionOffset = json.GetPropertyOrNull("instruction_offset")?.GetInt64();
var imageAddress = json.GetPropertyOrNull("image_addr")?.GetHexAsLong() ?? 0;
var symbolAddress = json.GetPropertyOrNull("symbol_addr")?.GetHexAsLong();
var instructionAddress = json.GetPropertyOrNull("instruction_addr")?.GetHexAsLong();
var addressMode = json.GetPropertyOrNull("addr_mode")?.GetString();
var functionId = json.GetPropertyOrNull("function_id")?.GetString();
var functionId = json.GetPropertyOrNull("function_id")?.GetHexAsLong();

return new SentryStackFrame
{
Expand All @@ -266,9 +249,6 @@ public static SentryStackFrame FromJson(JsonElement json)
ImageAddress = imageAddress,
SymbolAddress = symbolAddress,
InstructionAddress = instructionAddress,
#pragma warning disable 0618
InstructionOffset = instructionOffset,
#pragma warning restore 0618
AddressMode = addressMode,
FunctionId = functionId,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@
InApp: false,
Package: Sentry.NLog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@
InApp: false,
Package: Sentry.NLog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@
InApp: false,
Package: Sentry.NLog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@
InApp: false,
Package: Sentry.NLog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,11 @@
InApp: false,
Package: Sentry.NLog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,11 @@
InApp: false,
Package: Sentry.Serilog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,11 @@
InApp: false,
Package: Sentry.Serilog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,11 @@
InApp: false,
Package: Sentry.Serilog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,11 @@
InApp: false,
Package: Sentry.Serilog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,11 @@
InApp: false,
Package: Sentry.Serilog.Tests, Version=SCRUBBED, Culture=SCRUBBED, PublicKeyToken=SCRUBBED,
Platform: null,
ImageAddress: 0,
ImageAddress: null,
SymbolAddress: null,
InstructionAddress: ____,
InstructionOffset: null,
InstructionAddress: 2,
AddressMode: rel:0,
FunctionId: ____
FunctionId: 1
}
]
},
Expand Down
4 changes: 2 additions & 2 deletions test/Sentry.Testing/VerifyExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ private class StackFrameConverter : WriteOnlyJsonConverter<SentryStackFrame>

public override void Write(VerifyJsonWriter writer, SentryStackFrame obj)
{
obj.FunctionId = ScrubAlphaNum(obj.FunctionId);
obj.InstructionAddress = ScrubAlphaNum(obj.InstructionAddress);
obj.FunctionId = obj.FunctionId is null ? null : 1;
obj.InstructionAddress = obj.InstructionAddress is null ? null : 2;
obj.Package = obj.Package.Replace(PackageRegex, "=SCRUBBED");

if (RuntimeInfo.GetRuntime().IsMono())
Expand Down
8 changes: 3 additions & 5 deletions test/Sentry.Tests/ApiApprovalTests.Run.Core3_1.verified.txt
Original file line number Diff line number Diff line change
Expand Up @@ -809,12 +809,10 @@ namespace Sentry
public string? FileName { get; set; }
public System.Collections.Generic.IList<int> FramesOmitted { get; }
public string? Function { get; set; }
public string? FunctionId { get; set; }
public long ImageAddress { get; set; }
public long? FunctionId { get; set; }
public long? ImageAddress { get; set; }
public bool? InApp { get; set; }
public string? InstructionAddress { get; set; }
[System.Obsolete("This property is unused and will be removed in the future.")]
public long? InstructionOffset { get; set; }
public long? InstructionAddress { get; set; }
public int? LineNumber { get; set; }
public string? Module { get; set; }
public string? Package { get; set; }
Expand Down
8 changes: 3 additions & 5 deletions test/Sentry.Tests/ApiApprovalTests.Run.DotNet6_0.verified.txt
Original file line number Diff line number Diff line change
Expand Up @@ -810,12 +810,10 @@ namespace Sentry
public string? FileName { get; set; }
public System.Collections.Generic.IList<int> FramesOmitted { get; }
public string? Function { get; set; }
public string? FunctionId { get; set; }
public long ImageAddress { get; set; }
public long? FunctionId { get; set; }
public long? ImageAddress { get; set; }
public bool? InApp { get; set; }
public string? InstructionAddress { get; set; }
[System.Obsolete("This property is unused and will be removed in the future.")]
public long? InstructionOffset { get; set; }
public long? InstructionAddress { get; set; }
public int? LineNumber { get; set; }
public string? Module { get; set; }
public string? Package { get; set; }
Expand Down
8 changes: 3 additions & 5 deletions test/Sentry.Tests/ApiApprovalTests.Run.DotNet7_0.verified.txt
Original file line number Diff line number Diff line change
Expand Up @@ -810,12 +810,10 @@ namespace Sentry
public string? FileName { get; set; }
public System.Collections.Generic.IList<int> FramesOmitted { get; }
public string? Function { get; set; }
public string? FunctionId { get; set; }
public long ImageAddress { get; set; }
public long? FunctionId { get; set; }
public long? ImageAddress { get; set; }
public bool? InApp { get; set; }
public string? InstructionAddress { get; set; }
[System.Obsolete("This property is unused and will be removed in the future.")]
public long? InstructionOffset { get; set; }
public long? InstructionAddress { get; set; }
public int? LineNumber { get; set; }
public string? Module { get; set; }
public string? Package { get; set; }
Expand Down
8 changes: 3 additions & 5 deletions test/Sentry.Tests/ApiApprovalTests.Run.Net4_8.verified.txt
Original file line number Diff line number Diff line change
Expand Up @@ -808,12 +808,10 @@ namespace Sentry
public string? FileName { get; set; }
public System.Collections.Generic.IList<int> FramesOmitted { get; }
public string? Function { get; set; }
public string? FunctionId { get; set; }
public long ImageAddress { get; set; }
public long? FunctionId { get; set; }
public long? ImageAddress { get; set; }
public bool? InApp { get; set; }
public string? InstructionAddress { get; set; }
[System.Obsolete("This property is unused and will be removed in the future.")]
public long? InstructionOffset { get; set; }
public long? InstructionAddress { get; set; }
public int? LineNumber { get; set; }
public string? Module { get; set; }
public string? Package { get; set; }
Expand Down
Loading