|
|
|
|
|
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]}");
}
}
}
}
|
|