2010-03-03 2 views
49

Я хочу развернуть версию моего приложения, выполненную на C#.C# версия релиза имеет файл .pdb

Когда я создаю с использованием конфигурации Release, я все еще вижу, что создаются файлы .pdb, что означает, что мое приложение все еще можно отлаживать. Это также означает, что некоторая отладочная информация присутствует где-то в моем коде, немного замедляя ее.

Если это так, как я могу полностью подавить любую отладочную информацию, полученную в двоичных файлах? Вы также знаете причину наличия выпуска .pdb? Конфигурация Release имеет Optimize code, и определена только константа TRACE, а не DEBUG.

Благодарим за помощь.

+1

@meagar вы должны хранить файлы .pdb даже в режиме выпуска для справок в будущем, даже если вы не хотите, чтобы они были упакованы в окончательный установщик MSI для отправки клиентам. Файлы Pdb будут вашим единственным лучом надежды, когда что-то всплывает необработанным образом, что приводит к сбою вашего приложения в производственных коробках. Файлы pdb очень полезны для отладки файлов аварийного дампа с помощью инструмента winDbg, который поставляется с Windows SDK. ОПТИМИЗИРОВАННЫЙ ФУНКЦИЯ кода должен оставаться установленным, как вы правильно упомянули. – RBT

+2

@RasikBihariTiwari Мне все равно. Я не задавал этот вопрос. – meagar

+0

Извините @meagar! Я должен был обратиться к Абруццо Форте. Приносим извинения за неудобства. Было 6 часов утра, и похоже, что я все еще был сон;) – RBT

ответ

79

Если вы хотите отключить PDB поколение файла, вам необходимо использовать диалог "Advanced build settings" доступные в свойствах проекта после нажатия на кнопку "Advanced..."», расположенную в нижней части вкладки Build.

Набор Output - Debug info: к None для выпуска построить конфигурацию и никакие файлы pdb не будут сгенерированы.

6

Наличие компилятора для создания файла .pdb не является взаимоисключающим для оптимизации кода.

Для получения дополнительной информации по этому вопросу читайте эти blogentries.

+0

Да, но вложение информации об отладке в сборку также может повлиять на производительность (согласно Microsoft) – Justin

40

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

+0

Hi Brian! Благодаря! Я скептически относился к этому, но, похоже, все согласны с этим! –

+0

Итак, все согласны с тем, что файлы PDB не снижают производительность? Кто-нибудь проверил какие-либо тесты для подтверждения? – theJerm

+0

@ theJerm Приложение не считывает PDB во время выполнения. Поэтому, кроме дискового пространства, которое они занимают, нет накладных расходов, если вы не отлаживаете. –

12

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

Без использования .PDB номера строк и имена файлов не включаются в stacktraces, поэтому значительно сложнее их отладить.

+0

Спасибо! Это было полезно! Я не понял, что номер строки не присутствует в StackTrace для каждого объекта исключения! –

13

Вы управляете генерацией pdb/символов в свойствах проекта в разделе Build -> Advanced ... -> Debug info :. Варианты:

  • ни (не символьной информации)
  • полный (а .pdb будет производиться, и некоторая информация символ встроен в сборку)
  • PDB только (будет производиться а .pdb, но на сборку не влияют)

Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/8cw0bt21%28VS.80%29.aspx.

Я сильно рекомендуем выбрать PDB только вариант, не вариант Нет, как она по-прежнему дает вам некоторую информацию о символах, не влияя на сборку - вы, вероятно, обнаружите, что это текущая установка у вас есть на ваш выпуск.