Ответ 1
Потому что без файлов PDB невозможно было бы отлаживать сборку "Release" ничем иным, кроме отладки на уровне адреса. Оптимизация действительно делает номер на вашем коде, что очень затрудняет найти виновника, если что-то пойдет не так (скажем, заброшено исключение). Даже установка контрольных точек чрезвычайно сложна, поскольку строки исходного кода нельзя сопоставить друг с другом с (или даже в том же порядке, что и сгенерированный код сборки). Файлы PDB помогают вам и отладчику выйти, что делает посмертную отладку значительно проще.
Вы заявляете, что если ваше программное обеспечение готово к выпуску, вы должны были выполнить всю свою отладку. Хотя это, безусловно, верно, есть несколько важных моментов, которые следует учитывать:
-
Вы также должны проверить и отладить свое приложение (перед его выпуском) с помощью сборки "Release" . Это потому, что включение оптимизаций (они по умолчанию отключены в конфигурации "Отладка" ) иногда могут вызывать появление тонких ошибок, которые вы иначе не поймаете. Когда вы будете выполнять эту отладку, вам понадобятся символы PDB.
-
Клиенты часто сообщают о крайних случаях и ошибках, которые появляются только в "идеальных" условиях. Это вещи, которые почти невозможно воспроизвести в лаборатории, потому что они полагаются на какую-то странную конфигурацию этой пользовательской машины. Если они являются особенно полезными клиентами, они сообщают об исключении, которое было выбрано, и предоставили вам трассировку стека. Или они даже позволят вам занять свою машину для отладки вашего программного обеспечения удаленно. В любом из этих случаев вам понадобятся файлы PDB.
-
Профилирование всегда должно выполняться на сборках "Release" с включенными оптимизациями. И еще раз, файлы PDB пригождаются, потому что они позволяют сопоставлять команды сборки, которые должны быть сопоставлены с исходным кодом, который вы на самом деле писали.
Вы не можете вернуться и сгенерировать файлы PDB после компиляции. * Если вы не создадите их во время сборки, вы потеряли свою возможность. Для их создания ничего не мешает. Если вы не хотите распространять их, вы можете просто опустить их из своих двоичных файлов. Но если вы позже решите, что хотите их, вам не повезло. Лучше всегда генерировать их и архивировать копию, на случай, если они вам понадобятся.
Если вы действительно хотите отключить их, это всегда вариант. В окне "Свойства проекта" установите для параметра "Debug Info" значение "none" для любой конфигурации, которую вы хотите изменить.
Обратите внимание, однако, что конфигурации "Отладка" и "Отпуск" по умолчанию используют разные настройки для испускания отладочной информации. Вы захотите сохранить эту настройку. Параметр "Debug Info" установлен на "full" для сборки Debug, что означает, что в дополнение к файлу PDB в сборку встроена отладочная информация о символах. Вы также получаете символы, которые поддерживают интересные функции, такие как edit-and-continue. В режиме деблокирования выбирается опция "pdb-only", которая, как и звук, включает только файл PDB, не затрагивая содержимое сборки. Таким образом, это не так просто, как простое присутствие или отсутствие файлов PDB в вашем каталоге /bin
. Но если вы используете опцию "pdb-only", присутствие файла PDB никоим образом не повлияет на производительность вашего кода во время выполнения.
* Как Марк Шерман указывает в комментарии, пока ваш исходный код не изменился (или вы можете получить исходный код из системы управления версиями), вы можете перестроить его и создать соответствующий файл PDB. По крайней мере, обычно. Это работает хорошо в большинстве случаев, но компилятор не гарантирует сгенерирование идентичных двоичных файлов при каждом компиляции одного и того же кода, поэтому могут быть тонкие различия. Хуже того, если вы сделали какие-либо обновления для вашей инструментальной цепочки тем временем (например, применяя пакет обновления для Visual Studio), PDB с меньшей вероятностью совпадают. Чтобы гарантировать надежную генерацию файлов PDB ex postfacto, вам нужно будет архивировать не только исходный код в вашей системе управления версиями, но и бинарные файлы для всей вашей цепочки построения, чтобы вы могли точно воссоздать конфигурацию вашей среды сборки, Само собой разумеется, что гораздо проще просто создавать и архивировать файлы PDB.