Хорошо; принятие этого кода, работающего в режиме отладки -
static StackFrame GetTopFrameWithLineNumber(Exception e)
{
StackTrace trace = new StackTrace(e);
foreach (StackFrame frame in trace.GetFrames())
{
if (frame.GetFileLineNumber() != 0)
{
return frame;
}
}
return null;
}
Я ВСЕГДА возвращаю пустой указатель. Почему стековые фреймы не имеют никаких номеров строки когда, если я осматриваю Exception.StackTrace
строка, это ясно имеет их для какого-либо кода неплатформы? Есть ли некоторая проблема с построением отслеживания стека от исключения, о котором я не знаю?
РЕДАКТИРОВАНИЕ ДЛЯ ЯСНОСТИ: В вызванной исключительной ситуации I видят номера строки в свойстве StackTrace. Я предполагаю, что означает, что у меня есть все остальное, в чем я нуждаюсь.
Согласно документации о перегрузке конструктора StackTrace, которая принимает исключение , вы не можете ожидать номеров строк при создании StackTrace таким образом.
StackTrace создается с использованием текущего потока вызывающего и не содержит имени файла, номера строки или информации столбца .
Чтобы получить номера строк , вам нужно использовать перегрузку, которая принимает логическое значение, а также исключение .
Вам также понадобятся файлы символов (pdb) для номеров строк. Файлы символов доступны для как отладочной, так и выпускной сборок.