Число строк дисплея в Отслеживании стека для блока.NET в режиме Release

Существует много статей, объясняющих, почему вы никогда не должны вызывать виртуальные функции в конструкторе и деструкторе на C ++. Посмотрите здесь здесь и здесь , чтобы узнать, что происходит за сценой во время таких вызовов.

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

136
задан Michael Kniskern 30 March 2009 в 21:42
поделиться

5 ответов

  • Входят в Окно свойств для проекта, где Вы хотите видеть номера строки отслеживания стека.
  • Нажимают на Сборку "вертикальная вкладка".
  • Избранная конфигурация "Выпуска". <забастовка> Проверка ОТЛАДКА постоянный параметр.
  • Снятие флажка "Оптимизирует код" параметр для предотвращения случайной проблемы трассировки со встроенным кодом (этот шаг не важен).
  • Нажимают Advanced... кнопка и выбирают Output-> Debug Info-> pdb-только.
  • Развертывают сгенерированный .pdb файл с блоком.

Реализованный с комментарием ниже:

  • Еще одна вещь проверить находится в разделе "Package/Publish Web", что флажок "Exclude generated debug symbols" также неконтролируем
140
ответ дан 23 November 2019 в 23:40
поделиться

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

3
ответ дан 23 November 2019 в 23:40
поделиться

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

0
ответ дан 23 November 2019 в 23:40
поделиться

Мое решение

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

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

это причина

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

15
ответ дан 23 November 2019 в 23:40
поделиться

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

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

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

8
ответ дан 23 November 2019 в 23:40
поделиться