Отображение количества строк в Stack Trace для сборки .NET в режиме выпуска
-
06-07-2019 - |
Вопрос
Есть ли способ отобразить строки в трассировке стека для сборки/развертывания сборки .NET в режиме выпуска?
ОБНОВЛЯТЬ:
Мое приложение разделено на три проекта библиотеки классов и один проект «веб-сайта» ASP.NET.Ошибка, которую я пытаюсь отследить, находится в одном из трех проектов библиотеки классов.Я развернул файл pdb только для проекта библиотеки классов, который генерирует ошибку «Ссылка на объект не установлена на экземпляр объекта».
Номера строк по-прежнему не отображаются в трассировке стека.Нужно ли мне развертывать файлы PDB для всех проектов, чтобы получить номера строк в трассировке стека?
Рабочее решение
Развертывание файла pdb для каждого приложения устранило проблему с номером строки.
Решение
- Перейдите в окно «Свойства» проекта, в котором вы хотите увидеть номера строк трассировки стека.
- Нажмите на вкладку «Вертикальная постройка».
- Выберите конфигурацию «Выпустить».
Проверьте постоянный параметр DEBUG. - Снимите флажок с параметра «Оптимизировать код», чтобы избежать случайных проблем с трассировкой встроенного кода (этот шаг не является обязательным).
- Нажмите кнопку Дополнительно...и выберите «Вывод» -> «Отладочная информация» -> «pdb-only».
- Разверните созданный PDB-файл вместе со сборкой.
Реализовано с помощью комментария ниже:
- Еще одна вещь, которую следует проверить: в разделе «Пакет/Публикация в Интернете» флажок «Исключить сгенерированные символы отладки» также снят.
Другие советы
В VS2012 необходимо снять флажок " Исключить сгенерированные символы отладки " в разделе Свойства пакета / публикации в Интернете.
Мое решение
Скопируйте файл pdb в ту же папку, что и исполняемый файл.
Теперь я могу просмотреть номер строки при запуске exe-файла.
это причина
http://msdn.microsoft. ком / EN-US / библиотека / ee416588% 28В = vs.85% 29.aspx
В прошлом я сталкивался с проблемами, когда чувствовал необходимость развернуть файлы PDB с помощью сборки выпуска, чтобы отследить ошибку. Причина, как вы сказали, заключается в том, что исключение произошло в методе, который был очень большим, и я не мог точно определить, где это происходит.
Это может указывать на то, что метод необходимо реорганизовать в более мелкие, более детализированные методы. Не один размер подходит для всех ответов, но этот подход хорошо послужил мне в краткосрочной перспективе (я часто обнаруживал ошибку во время рефакторинга) и в долгосрочной перспективе.
Просто мысль.
Включите символы отладки в ваш пакет сборки / развертывания.
В VS 2008 Express я нашел его в разделе «Свойства проекта» - > Компилировать - > Дополнительные параметры компиляции.
Это работает каждый раз. Вам просто нужно подстроковать сообщение трассировки стека. Очень легко! Кроме того, в 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++;
}