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


251

Що таке файл PDB і як його можна виключити з папки випуску, коли я переробляю рішення?


17
pdb - це файл бази даних програми, який створюється при компіляції. Цей файл містить інформацію про налагодження та стан проекту, що дозволяє поступово зв’язувати конфігурацію налагодження вашої програми.
павантований

@pavanred Ви впевнені, що компілятор C # також поступово посилається? Я чув про це лише у світі C ++. У проекті C ++ ви вмикаєте / відключаєте інкрементальне посилання із властивостей проекту. Чи є варіант і в проекті C #?
RBT

Відповіді:


235

Файл PDB містить інформацію для налагоджувача, з яким потрібно працювати. У збірці випуску відомостей менше, ніж у будь-якій версії налагодження. Але якщо ви хочете, щоб він взагалі не генерувався, перейдіть до властивостей зборки вашого проекту, виберіть Конфігурація випуску, натисніть "Додатково ..." і під "Інформацією про відладку" виберіть "Ні".


2
@Jon Чи допомагає вона надавати додаткову інформацію користувачеві, якщо програма виходить з ладу? (тобто чи допомагає це у вікні JIT, а не "Цю програму потрібно закінчити? Надішліть звіт про помилки Windows")
Джаред Харлі

19
Майте на увазі, що ви, ймовірно, повинні зберігати їх у випуску налагодження, оскільки це дозволяє відстежувати винятки до певного рядка у вашому коді. Без символів у файлі pdb вам буде важко визначити конкретні проблеми, щоб їх вирішити. Вам не обов’язково виключати їх також із версій версій, оскільки іноді додаткова інформація у великому звіті може бути дуже корисною.
Дарбіо

4
@Jared: Так, він включає стек стеження винятку, який вказує на певну функцію та рядок коду.
Дарбіо

1
@Jred: Що ви маєте на увазі під "вікном JIT"? Навряд чи ви зможете дати набагато більше інформації користувачеві, але це може дозволити вам приєднати налагоджувач до версії версії, якщо потрібно. Зазвичай ви не включаєте його в додатки для кінцевих користувачів. Звичайно, лише те, що воно скопійовано у папку Release, не означає, що вам потрібно відправити його в інсталятор ...
Jon Skeet

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

129

Я спочатку задавав собі питання " Чи потрібен файл PDB, розгорнутий на машині мого клієнта? ", І прочитавши цю публікацію, вирішив виключити файл.

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


2
Це дуже важлива частина, яку слід пам’ятати, яку accepted answerтут не згадують.
Monku

85

PDB - це абревіатура для P rogram D ata B ase . Як випливає з назви, саме сховище (постійне сховище, наприклад, бази даних) підтримує інформацію, необхідну для запуску програми в режимі налагодження. Він містить багато важливої ​​відповідної інформації, яка потрібна під час налагодження коду (у Visual Studio), наприклад, у які моменти ви вставили точки перерви, де очікуєте, що відладчик зламається у Visual Studio.

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

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

Якщо ви все ще хочете повністю відключити генерацію *.pdbфайлів для будь-якого випуску, перейдіть до властивостей проекту -> Вкладка збірки -> Клацніть на Advancedкнопці -> Виберіть noneу спадному вікні "Інформація про помилку" -> натисніть, OKяк показано на знімку нижче .

Немає налаштувань інформації про налагодження для проекту C #

Примітка . Цей параметр потрібно буде виконати окремо для конфігурацій збірки "Налагодження" та "Випуск".


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.