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[])
Если вы хотите получать такие данные без студии, то не забудьте о наличие .pdb файла!
