StackFrame, нет имени файла и номера строки

375
10 июля 2018, 07:40

Использую debug - сборку приложения, и хотел бы получить имя строки вызова и имя файла. Однако, в случае имени файла, в текущем кадре хранится значение null, а номера строки(столбца также) всегда равны 0. Почему это происходит? Выдержки кода:

StackFrame sf = new StackTrace().GetFrame(1); // да, мне нужен *предыдущий* кадр
string file = sf.GetFileName(); // здесь null(всегда)
string func = sf.GetMethod().Name; // здесь есть имя метода 
int line = sf.GetFileLineNumber(); // здесь 0(всегда)
// и так далее

Также, хотелось бы отметить, что StackFrame для конструктора класса всегда возвращает в виде имени метода следующее значение: .ctor Понятно, что сокращение слова Constructor(возможно), но хотелось бы полное имя получить.

Answer 1

Покопавшись ещё более глубоко, проблема была решена следующим образом:

StackFrame sf = new StackFrame(1, true);  // второй аргумент конструктора включает запись об источнике(файл, строки)
string file = sf.GetFileName();
string func = "";
if (sf.GetMethod().Name.StartsWith(".")) // проверяем на наличие символа '.' в имени "метода" 
    func = sf.GetMethod().DeclaringType.Name + ".Constructor"; // устанавливаем имя конструктора через класс: Класс.Конструктор
else
    func = sf.GetMethod().Name;
func += "(";
foreach (var t in sf.GetMethod().GetParameters()) // получаем и перечисляем все параметры методов и добавляем к строке
    func += t.ToString() + ", ";
if (sf.GetMethod().GetParameters().Length > 0)
    func = func.Remove(func.Length - 2);
func += ")";
// выполняется остальной нужный код...

В результате:

  • Информация о файле выводится корректно
  • Информация о номере строки выводится корректно
  • Вывод конструктора выглядит читаемым(Класс.Конструктор)
  • Также, выводятся параметры с типами и именами

Может быть, кому-то я помогу.

READ ALSO
Как сделать высокочастотный фильтр? - C#

Как сделать высокочастотный фильтр? - C#

Если при создание низкочастотного я использовал класс ComplexImage Мне нужно сделать что бы изображение получалось как на фильтре, только на оборот...

257
Таймер обратного отсчёта C# [закрыт]

Таймер обратного отсчёта C# [закрыт]

Всем добрый вечер! Мне нужно сделать таймер обратного отсчёта 10 минутВ форме есть кнопка button1, после нажатия кнопки запустить таймер

265
Не работает Style в ListView

Не работает Style в ListView

Есть вот такой вот ListView:

222
Отключение каскадного удаления в Entity Framework Core

Отключение каскадного удаления в Entity Framework Core

Я хочу создать 2 таблицы: Team, Match, где в таблице Match существует 2 ссылки на таблицу TeamКогда пытаюсь сгенерировать БД, появляется ошибка связанная...

244