Чому Visual Studio 2005 створює .pdb
файли під час компіляції у випуску? Я не буду налагоджувати версію версії, то чому вони створюються?
Чому Visual Studio 2005 створює .pdb
файли під час компіляції у випуску? Я не буду налагоджувати версію версії, то чому вони створюються?
Відповіді:
Оскільки без файлів PDB неможливо було б налагодити збірку "Release" за допомогою іншого, крім налагодження на рівні адрес. Оптимізація дійсно робить номер вашого коду, що ускладнює пошук винуватця, якщо щось піде не так (скажімо, викинутий виняток). Навіть встановлення точок прориву є надзвичайно важким, оскільки рядки вихідного коду не можуть бути зіставлені один на один із (або навіть у тому ж порядку, що і) згенерованим кодом складання. Файли PDB допомагають вам і налагоджувачу, полегшуючи налагодження після смертей.
Ви вказуєте на те, що якщо ваше програмне забезпечення готове до випуску, ви повинні були виконати всі налагодження до того часу. Хоча це, безумовно, правда, є кілька важливих моментів, які слід пам’ятати:
Ви також повинні протестувати свою програму та налагоджувати її (перш ніж випустити її) за допомогою збірки "Випуск". Це тому, що ввімкнення оптимізацій (вони відключені за замовчуванням у конфігурації "Налагодження") іноді можуть спричинити появу тонких помилок, які ви б інакше не спіймали. Під час налагодження вам потрібні символи PDB.
Клієнти часто повідомляють про крайові випадки та помилки, які з'являються лише в "ідеальних" умовах. Це речі, які майже неможливо відтворити в лабораторії, оскільки вони покладаються на якусь хитру конфігурацію машини цього користувача. Якщо вони особливо корисні клієнтам, вони повідомлять про виняток, який було викинуто, і нададуть вам слід стека. Або вони навіть дозволять вам позичити їхню машину для віддаленої налагодження програмного забезпечення. У будь-якому з цих випадків вам потрібно, щоб файли PDB допомогли вам.
Профілювання завжди слід робити на "Release" збірках з увімкненими оптимізаціями. І ще раз, файли PDB стануть у нагоді, оскільки вони дозволяють зібраним профілем інструкцій зі складання повернути до вихідного коду, який ви насправді написали.
Ви не можете повернутися та генерувати файли PDB після компіляції. * Якщо ви не створите їх під час збирання, ви втратили можливість. Це не завадить нічого створити їх. Якщо ви не хочете їх розповсюджувати, ви можете просто їх опустити зі своїх бінарних файлів. Але якщо згодом ви вирішите, що хочете їх, вам не пощастить. Краще завжди генерувати їх і архівувати копію, на всякий випадок, якщо вони вам коли-небудь знадобляться.
Якщо ви дійсно хочете їх вимкнути, це завжди варіант. У вікні "Властивості" вашого проекту встановіть для параметра "Інформація про налагодження" значення "немає" для будь-якої конфігурації, яку потрібно змінити.
Чи є до відома, однак, що конфігурації «Debug» і «Release» зробити за замовчуванням використовує різні настройки для випромінювання налагоджувальної інформації. Ви хочете зберегти цей параметр. Параметр "Інформація про налагодження" встановлений на "повний" для збірки налагодження, що означає, що крім файлу PDB, інформація про налагодження вбудовується в збірку. Ви також отримуєте символи, які підтримують цікаві функції, такі як редагування та продовження. У режимі випуску вибирається параметр "лише для pdb", який, як це звучить, включає лише файл PDB, не впливаючи на зміст складання. Тож це не так просто, як проста наявність або відсутність файлів PDB у вашому /bin
каталозі. Але якщо припустимо, що ви використовуєте опцію "лише для pdb", файл PDB "
* Як в коментарі зазначає Марк Шерман , доки ваш вихідний код не змінився (або ви можете отримати оригінальний код із системи управління версіями), ви можете відновити його та створити відповідний файл PDB. Принаймні, зазвичай. Це працює добре більшу частину часу, але компілятор не гарантує створення однакових двійкових файлів кожного разу, коли ви компілюєте один і той же код , тому можуть бути тонкі відмінності. Гірше, якщо ви тим часом зробили якісь оновлення вашої ланцюжка інструментів (наприклад, застосувавши пакет оновлень для Visual Studio), PDB-файли ще менше ймовірні. Для гарантування надійної генерації ex postfactoФайли PDB, вам потрібно буде архівувати не тільки вихідний код у вашій системі контролю версій, але й двійкові файли для всієї ланцюга інструментів збірки, щоб гарантувати точне відтворення конфігурації середовища збирання. Само собою зрозуміло, що набагато простіше просто створити та архівувати файли PDB.
.reload /i foo.dll
. Це завантажить foo.pdb, навіть якщо foo.pdb був створений після випуску foo.dll.
PDB може бути створений Release
як для, так і для Debug
. Це встановлено у (у VS2010, але у VS2005 має бути подібним):
Проект → Властивості → Створення → Розширений → Інформація про налагодження
Просто змініть його на None
.
FileNotFoundException
), але ви не зможете побачити трасування стека. Це дуже важко чітко визначити, який рядок коду спричинив викид виключення.
Без файлів .pdb неможливо переступити через виробничий код; вам доведеться покладатися на інші інструменти, які можуть дорого і забирати багато часу. Я розумію, що ви можете використовувати трасування або windbg, наприклад, але це дійсно залежить від того, що ви хочете досягти. У певних сценаріях ви просто хочете перейти через віддалений код (без помилок чи винятків), використовуючи виробничі дані для спостереження за певною поведінкою, і саме тут .pdb файли стануть зручними. Без них запускати налагоджувач на цьому коді неможливо.
Чому ви настільки впевнені, що не будете налагоджувати версії версій? Іноді (сподіваємось, рідко, але трапляється), ви можете отримати з клієнта звіт про дефекти, який не може бути відтворений у версії налагодження з якихось причин (різні терміни, невелика інша поведінка чи що завгодно). Якщо ця проблема може бути відтворена у версії версії, ви будете раді мати відповідний pdb.
Крім того, ви можете використовувати звалища для злагодження свого програмного забезпечення. Клієнт надсилає вам його, а потім ви можете використовувати його для визначення точної версії вашого джерела - і Visual Studio навіть витягне потрібний набір символів налагодження (і джерело, якщо ви налаштовані правильно), використовуючи дамп для краху. Дивіться документацію Microsoft про магазини символів .
Файл .PDB - це коротка назва "База даних програми". Він містить інформацію про точку налагодження для налагоджувача та ресурси, які використовуються або посилаються. Його генерують, коли ми будуємо як режим налагодження. Це дозволяє застосувати до налагодження під час виконання.
Розмір збільшується .PDB-файлом у режимі налагодження. Він використовується, коли ми тестуємо нашу програму.
Хороша стаття файлу pdb.
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
У мультипроектному рішенні зазвичай потрібно мати одну конфігурацію, яка взагалі не створює файлів PDB або XML. Замість того, щоб змінювати Debug Info
властивість кожного проекту наnone
, я вважав, що доцільніше буде додати подію після складання, яка працює лише у певній конфігурації.
На жаль, Visual Studio не дозволяє вказувати різні події після складання для різних конфігурацій. Тому я вирішив це зробити вручну, відредагувавши csproj
файл запуску проекту та додавши наступне (замість будь-якого існуючого PostBuildEvent
тегу):
<PropertyGroup Condition="'$(Configuration)' == 'Publish'">
<PostBuildEvent>
del *.pdb
del *.xml
</PostBuildEvent>
</PropertyGroup>
На жаль, це зробить текстовим полем події побудови повідомлення пустим, і введення нічого в нього може мати непередбачувані результати.
*.xml
файли, будьте обережні.
Файли символів налагодження ( .pdb) та XML doc ( .xml) складають великий відсоток від загального розміру і не повинні входити до пакету звичайного розгортання. Але слід мати доступ до них у разі необхідності.
Один з можливих підходів: наприкінці процесу збирання TFS перемістіть їх до окремого артефакту.
Насправді без файлів PDB та символічної інформації у них було б неможливо створити успішний звіт про аварійне завершення (файли демпінгу пам’яті), і Microsoft не матиме повного уявлення про те, що спричинило проблему.
Таким чином, наявність PDB покращує звітність про збої.