Отображение номера строки в 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 вам необходимо отключить параметр «Оптимизировать код», чтобы в режиме выпуска отображался правильный номер строки.

Параметры компилятора C#, управляющие генерацией кода

Это работает каждый раз. Вам просто нужно подстроковать сообщение трассировки стека. Очень легко! Кроме того, в 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++;
}
Другие вопросы по тегам