Hacker News new | ask | show | jobs
by sakopov 989 days ago
This is pretty awesome! This got me curious if I can do this in C# so I took a quick stab at it. It's not actually updating the original stack trace but it's kind of cool. Might be worth exploring further :)

    static void Main()
    {
        try
        {
            throw new DivideByZeroException("Boom!");
        }
        catch (Exception ex)
        {
            var trace = new StackTrace(ex, true);
            var frame = trace.GetFrame(0);

            var targetFilename = frame.GetFileName();
            var targetLineNumber = frame.GetFileLineNumber();

            Console.WriteLine($"Exception occurred at {targetFilename}, line {targetLineNumber}");

            if (File.Exists(targetFilename))
            {
                var source = File.ReadAllLines(targetFilename);
                var startIndex = Math.Max(0, targetLineNumber - 3);
                var endIndex = Math.Min(source.Length - 1, targetLineNumber + 1);

                for (var i = startIndex; i <= endIndex; i++)
                {
                    var lineNumber = i + 1;
                    Console.WriteLine($"{(lineNumber == targetLineNumber ? $">> {lineNumber}" : $"   {lineNumber}")}{source[i]}");
                }
            }
        }
    }