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