Генерация выпуска.pdb файлы, почему?

почему Visual Studio 2005 создает .pdb файлы при компиляции в релиз? Я не буду отлаживать сборку выпуска, так почему они генерируются?

8 ответов


потому что без файлов PDB было бы невозможно отладить сборку "выпуска" чем-либо иным, кроме отладки на уровне адреса. оптимизация действительно на ваш код, что делает его очень трудно найти виновного, если что-то пойдет не так (скажем, исключение). Даже установка точек останова чрезвычайно сложна, потому что строки исходного кода не могут быть сопоставлены один к одному С (или даже в том же порядке, что и) сгенерированный код сборки. Файлы PDB помогут вам и отладчик, что делает посмертную отладку значительно проще.

вы указываете, что если ваше программное обеспечение готово к выпуску, вы должны были сделать всю отладку к тому времени. Хотя это, безусловно, верно, есть несколько важных моментов, которые следует иметь в виду:

  1. вы должны и тестирование и отладка приложения (перед его выпуском) с помощью сборки" Release". Это потому, что включение оптимизации (они отключены по умолчанию в конфигурации "отладка") иногда может вызвать тонкие ошибки, которые вы не поймали бы в противном случае. Когда вы делаете эту отладку, вам понадобятся символы PDB.

  2. клиенты часто сообщают о крайних случаях и ошибках, которые возникают только в "идеальных" условиях. Это вещи, которые почти невозможно воспроизвести в лаборатории, потому что они полагаются на некоторую причудливую конфигурацию машины этого пользователя. Если они особенно полезные клиенты, они будут сообщите об исключении, которое было создано, и предоставьте трассировку стека. Или они даже позволят вам заимствовать их машину для удаленной отладки вашего программного обеспечения. В любом из этих случаев вам понадобятся файлы PDB, чтобы помочь вам.

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

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

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

обратите внимание, однако, что конфигурации" Debug "и" Release"do по умолчанию используйте разные настройки для выдачи отладочной информации. Вы захотите сохранить эту настройку. Параметр "Debug Info" имеет значение "full" для сборки отладки, что означает, что в в дополнение к pdb-файлу в сборку внедряется отладочная информация о символах. Вы также получаете символы, которые поддерживают интересные функции, такие как edit-and-continue. В режиме выпуска выбрана опция "pdb-only", которая, как это звучит, включает только файл PDB, не влияя на содержимое сборки. Таким образом, это не так просто, как простое наличие или отсутствие файлов PDB в вашем . Но если вы используете опцию "pdb-only", присутствие файла PDB никоим образом не повлияет производительность во время выполнения кода.

* As Марк Шерман указывает в комментарии, пока ваш исходный код не изменился (или вы можете получить исходный код из системы управления версиями), вы можете перестроить его и создать соответствующий файл PDB. По крайней мере, обычно. Это работает хорошо большую часть времени, но компилятор не гарантирует создание идентичных двоичных файлов каждый раз при компиляции одного и того же кода, значит, есть мая быть тонкие различия. Хуже того, если вы сделали какие-либо обновления для вашей toolchain в то же время (например, применение пакета обновления для Visual Studio), PDBs еще менее вероятно, чтобы соответствовать. Гарантировать надежное поколение ex postfacto PDB-файлы, вам нужно будет архивировать не только исходный код в вашей системе управления версиями, но и двоичные файлы для всей вашей цепочки инструментов сборки, чтобы вы могли точно воссоздать конфигурацию вашего среда сборки. Само собой разумеется, что гораздо проще просто создавать и архивировать файлы pdb.


PDB может быть создан для Release а также Debug. Это установлено в (в VS2010, но в VS2005 должно быть похоже):

ProjectPropertiesBuildAdvancedDebug Info

просто измените его на None.


без .pdb-файлы практически невозможно пройти через производственный код; вы должны полагаться на другие инструменты, которые могут быть дорогостоящими и трудоемкими. Я понимаю, что вы можете использовать трассировку или windbg, например, но это действительно зависит от того, чего вы хотите достичь. В некоторых сценариях вы просто хотите пройти через удаленный код (без ошибок или исключений), используя производственные данные для наблюдения за определенным поведением, и это где .pdb файлы пригодятся. Без них отладчик на этом коде невозможен.


Почему вы так уверены, что не будете отлаживать сборки выпуска? Иногда (надеюсь, редко, но случается) вы можете получить отчет о дефекте от клиента, который по какой-то причине не воспроизводится в отладочной версии (разные тайминги, небольшое различное поведение или что-то еще). Если эта проблема кажется воспроизводимой в сборке выпуска, вы будете рады иметь соответствующий pdb.


кроме того, вы можете использовать аварийные дампы для отладки программного обеспечения. Клиент отправляет его вам, а затем вы можете использовать его для идентификации точной версии источника - и Visual Studio даже вытащит правильный набор отладочных символов (и источник, Если вы настроены правильно) с помощью аварийного дампа. См. раздел Microsoft документация по хранилищам символов.


.PDB-файл-это краткое название "Program Database". Он содержит информацию о точке отладки для отладчика и ресурсах, которые используются или ссылаются. Его генерируется, когда мы строим как режим отладки. Позволяет приложение для отладки во время выполнения.

размер увеличения .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 tag):

  <PropertyGroup Condition="'$(Configuration)' == 'Publish'">
    <PostBuildEvent>
        del *.pdb
        del *.xml
    </PostBuildEvent>
  </PropertyGroup>

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


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

один возможный подход: в конце процесса сборки TFS переместите их в отдельный артефакт.