Что такое файл PDB?


252

Что такое файл PDB и как я могу исключить его из папки выпуска при перестройке своего решения?


17
pdb - это файл базы данных программы, который создается при компиляции. Этот файл содержит информацию об отладке и состоянии проекта, которая позволяет инкрементно связывать конфигурацию отладки вашей программы.
2010 года

@pavanred Вы уверены, что компилятор C # также выполняет инкрементные ссылки? Я слышал об этом только в мире C ++. В проекте C ++ вы включаете / отключаете инкрементные ссылки в свойствах проекта. Есть ли возможность в проекте C # также?
RBT

Ответы:


236

Файл PDB содержит информацию для работы с отладчиком. В любом случае в сборке Release меньше информации, чем в сборке Debug. Но если вы хотите, чтобы он вообще не генерировался, перейдите в свойства Build вашего проекта, выберите конфигурацию Release, нажмите «Advanced ...» и в «Debug Info» выберите «None».


2
@Jon Помогает ли пользователю предоставить дополнительную информацию в случае сбоя приложения? (т. е. помогает ли это с окном JIT, а не «Эта программа должна завершиться, отправьте отчет об ошибках Windows»)
Джаред Харли,

19
Имейте в виду, что вы, вероятно, должны держать их включенными в ваши отладочные выпуски, так как это позволяет отслеживать исключения для конкретной строки в вашем коде. Без символов в файле pdb вам будет сложно точно определить конкретные проблемы для их решения. Вам также не обязательно исключать их из сборок релизов, так как иногда дополнительная информация в большом отчете может быть очень полезной.
Дарбио

4
@Jared: Да, он включает в себя трассировку стека исключения, которое будет точно указывать на конкретную функцию и строку кода.
Дарбио

1
@Jared: Что вы подразумеваете под "окном JIT"? Маловероятно, что он предоставит пользователю гораздо больше информации, но он может позволить вам присоединить отладчик к сборке релиза, если вам это нужно. Как правило, вы не включили бы его для приложений конечного пользователя. Конечно, только то, что он скопирован в папку Release, не означает, что вы должны отправить его в установщик ...
Jon Skeet

3
@ Ата: PDB, а не PDF. Пожалуйста, выделите эти два в своем уме - это совершенно разные форматы файлов, для разных целей. Включение PDB не представляет особой проблемы; это может немного облегчить работу хакера , но это вас беспокоит? В общем, .NET в большинстве случаев можно относительно легко декомпилировать - если вы беспокоитесь об этом, просто не поставлять PDB не является хорошим решением.
Джон Скит

130

Первоначально я задавал себе вопрос « Нужен ли файл PDB, развернутый на компьютере моего клиента? », И после прочтения этого поста решил исключить этот файл.

Все работало нормально, до сегодняшнего дня, когда я пытался выяснить, почему в окне сообщения, содержащем a, Exception.StackTraceотсутствовала информация о файле и номере строки - это необходимо для устранения неполадок исключения. Я перечитал этот пост и нашел ключевой фрагмент информации: что, хотя для запуска приложения не требуется PDB, необходимо, чтобы в строке присутствовали номера файлов и StackTraceстрок. Я включил файл PDB в исполняемую папку, и теперь все в порядке.


2
Это очень важная часть, о которой accepted answerне следует упоминать.
Монку

85

PDB является сокращением для P rogram D ату B азы. Как следует из названия, это хранилище (постоянное хранилище, такое как базы данных) для хранения информации, необходимой для запуска вашей программы в режиме отладки. Он содержит много важной релевантной информации, необходимой при отладке вашего кода (в Visual Studio), например, в каких точках вы вставили точки останова, когда вы ожидаете, что отладчик сломается в Visual Studio.

Это причина, почему много раз Visual Studio не удается достичь точек останова, если вы удаляете *.pdbфайлы из папок отладки. Отладчик Visual Studio также может сообщить вам точный номер строки файла кода, в котором произошло исключение в трассировке стека с помощью *.pdbфайлов. Таким образом, файлы pdb действительно полезны для разработчиков при отладке программы.

Как правило, не рекомендуется исключать генерацию *.pdbфайлов. С точки зрения выпуска продукта вам следует создать файлы pdb, но не отправлять их на сайт клиента в установщике продукта. Сохраните все сгенерированные файлы PDB на сервере символов, откуда он может использоваться / использоваться в будущем при необходимости. Специально для случаев, когда вы устраняете проблемы, такие как сбой процесса. Когда вы начнете анализировать файлы аварийного дампа и если ваши исходные *.pdbфайлы, созданные в процессе сборки, не будут сохранены, Visual Studio не сможет разобрать точную строку кода, которая вызывает сбой .

Если вы по-прежнему хотите полностью отключить создание *.pdbфайлов для любого выпуска, перейдите в свойства проекта -> Вкладка «Сборка» -> Нажмите на Advancedкнопку -> Выберите noneиз выпадающего списка «Отладочная информация» -> нажмите, OKкак показано на снимке ниже ,

Нет Отладочная информация для проекта C #

Примечание . Этот параметр необходимо будет выполнить отдельно для конфигураций сборки «Debug» и «Release».


13

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

Вы можете отключить создание файлов pdb в Visual Studio. Если вы строите из командной строки или скрипта, то опустите /Debugпереключатель.


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

Ага; это все еще идет с выпуском с проектом по умолчанию.
Эндрю Барбер

Я только что проверил, и я также получаю один по умолчанию при использовании Visual Studio.
Марк Байерс

4

Файл базы данных отладки программы (pdb) - это формат файла Microsoft для хранения отладочной информации.

Когда вы создаете проект с использованием Visual Studio или командной строки, компилятор создает эти файлы символов.

Проверьте документы Microsoft

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.