Почему я не получаю номеров строки от отслеживания стека, созданного из Исключений?

Хорошо; принятие этого кода, работающего в режиме отладки -

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. Я предполагаю, что означает, что у меня есть все остальное, в чем я нуждаюсь.

9
задан Brian Webster 23 September 2012 в 10:02
поделиться

1 ответ

Согласно документации о перегрузке конструктора StackTrace, которая принимает исключение , вы не можете ожидать номеров строк при создании StackTrace таким образом.

StackTrace создается с использованием текущего потока вызывающего и не содержит имени файла, номера строки или информации столбца .

Чтобы получить номера строк , вам нужно использовать перегрузку, которая принимает логическое значение, а также исключение .

Вам также понадобятся файлы символов (pdb) для номеров строк. Файлы символов доступны для как отладочной, так и выпускной сборок.

17
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: