c# Получение строки Ошибки

try
{
.........
......Код
.........
}
catch
{ 
    Как получить номер строки кода, на которой произошла ошибка?
}

Ответы (2 шт):

Автор решения: FuManchu
    static void Main()
    {
        try
        {
            int i = 3;
            while (true)
                Console.WriteLine(i / --i); // тут будет деление на 0
        }
        catch (Exception e)
        {
            Console.WriteLine(e.StackTrace);
        }
    }

В .NET Core мне выводит, что ошибка на 13 строке, там находится Console.WriteLine()

at ConsoleApp1.Program.Main() in D:\Projects\C#\ConsoleApp1\Program.cs:line 13

→ Ссылка
Автор решения: EvgeniyZ

В .NET есть класс StackTrace, который позволяет "выдрать" из ошибки все необходимое.
Делается это примерно так:

static void Main(string[] args)
{
    try
    {
        throw new Exception("Некая ошибка");
    }
    catch (Exception e)
    {
        Console.WriteLine($"StackTrace: {e.StackTrace}\n\n");

        var trace = new StackTrace(e, true);

        foreach (var frame in trace.GetFrames())
        {
            var sb = new StringBuilder();

            sb.AppendLine($"Файл: {frame.GetFileName()}");
            sb.AppendLine($"Строка: {frame.GetFileLineNumber()}");
            sb.AppendLine($"Столбец: {frame.GetFileColumnNumber()}");
            sb.AppendLine($"Метод: {frame.GetMethod()}");

            Console.WriteLine(sb);
        }
    }

    Console.ReadKey();
}

Пояснения:

  • throw new Exception("Некая ошибка"); - Тестовая ошибка.
  • catch (Exception e) - Получаем информацию об ошибке.
  • Console.WriteLine($"StackTrace: {e.StackTrace}\n\n"); - выводим StackTrace в виде строки (такой нам генерирует Exeption).
  • var sb = new StringBuilder(); - Собираем необходимые данные в билдер.
  • Console.WriteLine(sb); - Выводим.

Вывод:

StackTrace:    в VFS.Program.Main(String[] args) в D:\Projects\Other\TestedApps\VFS\Program.cs:строка 100


Файл: D:\Projects\Other\TestedApps\VFS\Program.cs
Строка: 100
Столбец: 13
Метод: Void Main(System.String[])

Code


Если вы хотите получать такие данные без студии, то не забудьте о наличие .pdb файла!

→ Ссылка