Merge branch 'master' into fsharp-async-task-support
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<IncludeSource>true</IncludeSource>
|
||||
<DebugType>embedded</DebugType>
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
@@ -21,12 +22,13 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.0.25" PrivateAssets="all" />
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37" PrivateAssets="all" />
|
||||
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.3" PrivateAssets="all" />
|
||||
<PackageReference Include="System.Reflection.Metadata">
|
||||
<Version>1.6.0</Version>
|
||||
<Version>5.0.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" Condition="'$(TargetFramework)' != 'netstandard2.1'" />
|
||||
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" Condition="'$(TargetFramework)' != 'netstandard2.1'" />
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Label="TestInternalsVisibleTo">
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace System.Diagnostics
|
||||
var method = frame.GetMethod();
|
||||
|
||||
// Always show last stackFrame
|
||||
if (!ShowInStackTrace(method) && i < stackFrames.Length - 1)
|
||||
if (method != null && !ShowInStackTrace(method) && i < stackFrames.Length - 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -62,7 +62,7 @@ namespace System.Diagnostics
|
||||
var row = frame.GetFileLineNumber();
|
||||
var column = frame.GetFileColumnNumber();
|
||||
var ilOffset = frame.GetILOffset();
|
||||
if (string.IsNullOrEmpty(fileName) && ilOffset >= 0)
|
||||
if (method != null && string.IsNullOrEmpty(fileName) && ilOffset >= 0)
|
||||
{
|
||||
// .NET Framework and older versions of mono don't support portable PDBs
|
||||
// so we read it manually to get file name and line information
|
||||
@@ -636,6 +636,18 @@ namespace System.Diagnostics
|
||||
{
|
||||
Debug.Assert(method != null);
|
||||
|
||||
// Since .NET 5:
|
||||
// https://github.com/dotnet/runtime/blob/7c18d4d6488dab82124d475d1199def01d1d252c/src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs#L348-L361
|
||||
if ((method.MethodImplementationFlags & MethodImplAttributes.AggressiveInlining) != 0)
|
||||
{
|
||||
// Aggressive Inlines won't normally show in the StackTrace; however for Tier0 Jit and
|
||||
// cross-assembly AoT/R2R these inlines will be blocked until Tier1 Jit re-Jits
|
||||
// them when they will inline. We don't show them in the StackTrace to bring consistency
|
||||
// between this first-pass asm and fully optimized asm.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Since .NET Core 2:
|
||||
if (StackTraceHiddenAttributeType != null)
|
||||
{
|
||||
// Don't show any methods marked with the StackTraceHiddenAttribute
|
||||
@@ -653,6 +665,17 @@ namespace System.Diagnostics
|
||||
return true;
|
||||
}
|
||||
|
||||
// Since .NET Core 2:
|
||||
if (StackTraceHiddenAttributeType != null)
|
||||
{
|
||||
// Don't show any methods marked with the StackTraceHiddenAttribute
|
||||
// https://github.com/dotnet/coreclr/pull/14652
|
||||
if (IsStackTraceHidden(type))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (type == typeof(Task<>) && method.Name == "InnerInvoke")
|
||||
{
|
||||
return false;
|
||||
@@ -661,8 +684,13 @@ namespace System.Diagnostics
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (type == typeof(Task))
|
||||
if (type == typeof(Task) || type.DeclaringType == typeof(Task))
|
||||
{
|
||||
if (method.Name.Contains(".cctor"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (method.Name)
|
||||
{
|
||||
case "ExecuteWithThreadLocal":
|
||||
@@ -670,15 +698,24 @@ namespace System.Diagnostics
|
||||
case "ExecutionContextCallback":
|
||||
case "ExecuteEntry":
|
||||
case "InnerInvoke":
|
||||
case "ExecuteEntryUnsafe":
|
||||
case "ExecuteFromThreadPool":
|
||||
case "s_ecCallback":
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (type == typeof(ExecutionContext))
|
||||
{
|
||||
if (method.Name.Contains(".cctor"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (method.Name)
|
||||
{
|
||||
case "RunInternal":
|
||||
case "Run":
|
||||
case "RunFromThreadPoolDispatchLoop":
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -706,44 +743,33 @@ namespace System.Diagnostics
|
||||
}
|
||||
}
|
||||
|
||||
if (StackTraceHiddenAttributeType != null)
|
||||
// Fallbacks for runtime pre-StackTraceHiddenAttribute
|
||||
if (type == typeof(ExceptionDispatchInfo) && method.Name == "Throw")
|
||||
{
|
||||
// Don't show any types marked with the StackTraceHiddenAttribute
|
||||
// https://github.com/dotnet/coreclr/pull/14652
|
||||
if (IsStackTraceHidden(type))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type == typeof(TaskAwaiter) ||
|
||||
type == typeof(TaskAwaiter<>) ||
|
||||
type == typeof(ValueTaskAwaiter) ||
|
||||
type == typeof(ValueTaskAwaiter<>) ||
|
||||
type == typeof(ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter) ||
|
||||
type == typeof(ConfiguredValueTaskAwaitable<>.ConfiguredValueTaskAwaiter) ||
|
||||
type == typeof(ConfiguredTaskAwaitable.ConfiguredTaskAwaiter) ||
|
||||
type == typeof(ConfiguredTaskAwaitable<>.ConfiguredTaskAwaiter))
|
||||
{
|
||||
switch (method.Name)
|
||||
{
|
||||
return false;
|
||||
case "HandleNonSuccessAndDebuggerNotification":
|
||||
case "ThrowForNonSuccess":
|
||||
case "ValidateEnd":
|
||||
case "GetResult":
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (type.FullName == "System.ThrowHelper")
|
||||
{
|
||||
// Fallbacks for runtime pre-StackTraceHiddenAttribute
|
||||
if (type == typeof(ExceptionDispatchInfo) && method.Name == "Throw")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (type == typeof(TaskAwaiter) ||
|
||||
type == typeof(TaskAwaiter<>) ||
|
||||
type == typeof(ValueTaskAwaiter) ||
|
||||
type == typeof(ValueTaskAwaiter<>) ||
|
||||
type == typeof(ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter) ||
|
||||
type == typeof(ConfiguredValueTaskAwaitable<>.ConfiguredValueTaskAwaiter) ||
|
||||
type == typeof(ConfiguredTaskAwaitable.ConfiguredTaskAwaiter) ||
|
||||
type == typeof(ConfiguredTaskAwaitable<>.ConfiguredTaskAwaiter))
|
||||
{
|
||||
switch (method.Name)
|
||||
{
|
||||
case "HandleNonSuccessAndDebuggerNotification":
|
||||
case "ThrowForNonSuccess":
|
||||
case "ValidateEnd":
|
||||
case "GetResult":
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (type.FullName == "System.ThrowHelper")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -69,9 +69,8 @@ namespace System.Diagnostics
|
||||
}
|
||||
|
||||
var genericPartIndex = type.Name.IndexOf('`');
|
||||
Debug.Assert(genericPartIndex >= 0);
|
||||
|
||||
return type.Name.Substring(0, genericPartIndex);
|
||||
return (genericPartIndex >= 0) ? type.Name.Substring(0, genericPartIndex) : type.Name;
|
||||
}
|
||||
|
||||
private static void ProcessType(StringBuilder builder, Type type, DisplayNameOptions options)
|
||||
|
||||
Reference in New Issue
Block a user