Отображение номера строки в Stack Trace для сборки .NET в режиме выпуска - PullRequest
134 голосов
/ 10 марта 2009

Есть ли способ отобразить строки в трассировке стека для сборки .NET, собранной / развернутой в режиме выпуска?

ОБНОВЛЕНИЕ:

Мое приложение разделено на три проекта библиотеки классов и один проект "веб-сайта" ASP.NET. Ошибка, которую я пытаюсь отследить, связана с одним из трех проектов библиотеки классов. Я только развернул файл pdb для проекта библиотеки классов, который генерирует ошибку «Ссылка на объект не установлена ​​на экземпляр объекта».

Номера строк по-прежнему не отображаются в трассировке стека. Нужно ли развертывать файлы pdb для всех проектов, чтобы получить номера строк в трассировке стека?

Рабочий раствор

Развертывание файла pdb для каждого приложения устранило проблему с номером строки.

Ответы [ 7 ]

136 голосов
/ 10 марта 2009
  • Перейдите в окно «Свойства» для проекта, в котором вы хотите увидеть номера линий трассировки стека.
  • Нажмите на Build "вертикальная вкладка".
  • Выберите конфигурацию «Release». Проверьте постоянный параметр DEBUG.
  • Снимите флажок с параметра «Оптимизировать код», чтобы избежать случайной проблемы с трассировкой встроенного кода (этот шаг не является обязательным).
  • Нажмите кнопку «Дополнительно ...» и выберите «Вывод» -> «Отладочная информация» -> «pdb-only».
  • Развернуть сгенерированный файл .pdb со сборкой.

Реализуется с комментарием ниже:

  • Еще одна вещь, которую нужно проверить, в разделе «Пакет / публикация в Интернете», что флажок «Исключить сгенерированные символы отладки» также не установлен
17 голосов
/ 30 января 2014

В VS2012 необходимо снять флажок «Исключить сгенерированные символы отладки» в разделе свойств «Пакет / публикация в Интернете».

14 голосов
/ 04 сентября 2009

Мое решение

Скопируйте файл pdb в ту же папку, что и исполняемый файл.

Теперь я могу просмотреть номер строки при запуске EXE-файла.

это причина

http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx

8 голосов
/ 04 сентября 2009

В прошлом я сталкивался с проблемами, когда чувствовал необходимость развернуть файлы PDB с помощью сборки выпуска для отслеживания ошибки. Причина, как вы сказали, в том, что исключение произошло в методе, который был очень большим, и я не мог точно определить, где это происходит.

Это может указывать на то, что метод необходимо реорганизовать в более мелкие, более детальные методы. Не один размер подходит для всех ответов, но этот подход хорошо послужил мне в краткосрочной перспективе (я часто обнаруживал ошибку во время рефакторинга) и в долгосрочной перспективе.

Просто мысль.

3 голосов
/ 10 марта 2009

Включите символы отладки в ваш пакет сборки / развертывания.

0 голосов
/ 07 марта 2016

Это работает каждый раз. Вам просто нужно подстроковать сообщение трассировки стека. Очень легко! Кроме того, в vb.net вам нужно выполнить «Показать все файлы» и включить pdb.

'Err is the exception passed to this function

Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5)
Dim i As Integer = 0
While i < lineGrab.Length                   
    If (IsNumeric(lineGrab(i))) Then
        lineNo.Append(lineGrab(i))
    End If
    i += 1
End While

'LineNo holds the number as a string

C # версия:

string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5);

int i = 0;
int value;
while (i < lineGrab.Length)
{
    if (int.TryParse(lineGrab[i].ToString(), out value))
    {
        strLineNo.Append(lineGrab[i]);
    }
    i++;
}
0 голосов
/ 21 мая 2009

В VS 2008 Express я нашел его в Свойства проекта -> Компиляция -> Дополнительные параметры компиляции.

...