Есть ли способ отобразить строки в трассировке стека для сборки / развертывания сборки .NET в режиме выпуска?
ОБНОВИТЬ:
Мое приложение разделено на три проекта библиотеки классов и один проект «веб-сайта» ASP.NET. Ошибка, которую я пытаюсь отследить, находится в одном из трех проектов библиотеки классов. Я развернул файл pdb только для проекта библиотеки классов, который генерирует ошибку «Ссылка на объект не установлена на экземпляр объекта».
Номера строк по-прежнему не отображаются в трассировке стека. Нужно ли мне развертывать файлы pdb для всех проектов, чтобы получить номера строк в трассировке стека?
Рабочий раствор
Развертывание файла pdb для каждого приложения устранило проблему с номером строки.
c#
.net
visual-studio
stack-trace
line-numbers
Майкл Книскерн
источник
источник
В VS2012 вам также необходимо снять флажок «Исключить сгенерированные символы отладки» в разделе свойств «Пакет / Опубликовать в Интернете».
источник
Мое решение
Скопируйте файл pdb в ту же папку, что и исполняемый файл.
теперь я могу просмотреть номер строки при запуске exe-файла.
это причина
http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx
источник
В прошлом у меня возникали проблемы, когда я чувствовал необходимость развернуть файлы PDB с выпускной сборкой, чтобы отследить ошибку. Причина, как вы сказали, в том, что исключение произошло в методе, который был очень большим, и я не мог точно определить, где это происходило.
Это может быть признаком того, что метод должен быть преобразован в более мелкие и более детальные методы. Нет универсального ответа, но этот подход сослужил мне хорошую службу в краткосрочной перспективе (я часто обнаруживал ошибку во время рефакторинга) и в долгосрочной перспективе.
Просто мысль.
источник
Включите символы отладки в свой пакет сборки / развертывания.
источник
В VS 2008 Express я нашел его в Project Properties -> Compile -> Advanced Compile Options.
источник
Это работает каждый раз. Вам просто нужно вставить строку в сообщение трассировки стека. Очень просто! Кроме того, в 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++; }
источник