Older/Rider20182/Debugger/DebuggerStackFrames2.cs (45 lines of code) (raw):

using System; using System.Threading.Tasks; namespace Rider20182 { internal class DebuggerStackFrames2 { static DebuggerStackFrames2() { new DebuggerStackFrames2(); } public DebuggerStackFrames2() { Run(null); } public static void Run(string[] args) { new MyClass2<int, short>().DoSomething(); } public static void SomeMethod<TValue1, TValue2, TValue3>() { SomeMethod<char, bool>(); } public static void SomeMethod<TValue1, TValue2>() { new MyClass2<string, double>().AsyncMethod<float, long>(1, 2).Wait(); } } internal class MyClass2<TKey, TValue> { public void DoSomething() { DebuggerStackFrames2.SomeMethod<decimal, byte, uint>(); } public async Task<int> AsyncMethod<TFirst, TSecond>(int a, int b) { await AsyncWaiter<ushort>(); return 1; } public async Task AsyncWaiter<TValue>() { await Task.Delay(100); // Place breakpoint here, and compare call stack with previous versions Console.WriteLine(); } } }