Visual Studio: отладочная информация в сборке релиза - PullRequest
26 голосов
/ 16 июня 2011

У меня возникает соблазн включить отладочную информацию в мои сборки, предназначенные для клиентов. Насколько я вижу, единственным недостатком является увеличение размера двоичного файла на 25%. Преимущество состоит в том, что я могу сразу получить аварийный дамп, который легче анализировать. Я готов жить с 25% увеличением. Есть ли другие недостатки, которые я упускаю?

Это проект на C, и все, что я хочу сделать, это Linked / Debugging / Generate Debug Info

Ответы [ 4 ]

37 голосов
/ 16 июня 2011

Размер исполняемого файла должен увеличиться гораздо меньше, чем на 25%.

На самом деле я немного удивлен, что он вообще сильно увеличивается, но некоторые быстрые тесты показывают, что по крайней мере один большой пример проекта (ScummVM) увеличивает .exe с 10 205 184 байт до 10 996 224 байт, просто добавив /DEBUG опция для шага ссылки (увеличение примерно на 8%)./DEBUG указывается с помощью опции "Linker | Debugging | Generate Debug Info" в IDE.Обратите внимание, что эти настройки должны не влиять на оптимизацию, генерируемую компилятором.

Я знаю, что указатель на файл .pdb помещен в исполняемый файл, но это не так уж и много.,Я немного поэкспериментировал и обнаружил, что включение опции компоновщика /OPT:REF изменило разницу в размере до 10 205 184 против 10 205 696.Таким образом, сборка не /DEBUG осталась прежнего размера, но сборка /DEBUG уменьшилась только до 512 байт (что может быть учтено указателем на .pdb - возможно, компоновщик округляет до некоторого кратного 512 или чего-то еще)).Намного менее чем на 1% больше.Очевидно, добавление /DEBUG заставляет компоновщик сохранять объекты без ссылок, если вы не укажете также /OPT:REF.(Опция "Linker | Optimization | References" в IDE).

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

Конечно, нужно помнить, что вам нужно будет архивировать файлы .pdb вместе с вашим файлом.релизы.Пакет «Средства отладки для Windows» (который теперь распространяется в Windows SDK) предоставляет инструмент сервера символов, позволяющий архивировать файлы .pdbs и легко извлекать их для отладки.

Единственный недостаток, о котором я могу подуматьРаспространение файлов .pdb заключается в том, что это может упростить реверс-инжиниринг вашего приложения, если вас это беспокоит.Обратите внимание, что Microsoft распространяет символы для Windows (используя общедоступный сервер символов - а также пакеты полных наборов символов для некоторых конкретных выпусков).Однако символы, которые они распространяют, проходят этап очистки, который удаляет определенные элементы, которые они считают чувствительными.Вы можете сделать то же самое (или подобное), используя опцию компоновщика /PDBSTRIPPED ("Linker | Debugging | Strip Private Symbols" в IDE).См. документы MSDN для получения подробных сведений об удалении этого параметра.Если вы собираетесь распространять символы, возможно, уместно использовать эту опцию.

2 голосов
/ 14 июня 2013

В соответствии с документацией VS2005 по адресу http://msdn.microsoft.com/en-us/library/xe4t6fc1(v=vs.80).aspx:

/ DEBUG изменяет значения по умолчанию для параметра / OPT с REF на NOREF и с ICF на NOICF (поэтому вам необходимо явно указать /OPT: REF или /OPT:ICF).

В моем случае это помогло, когда я включил оба:

/O2 /DEBUG /OPT:REF /OPT:ICF
1 голос
/ 16 июня 2011

Вы не упоминаете, на каком языке вы находитесь, могут быть разные ответы для C ++ и C #.

Я не уверен на 100%, какие изменения вы собираетесь сделать. Собираетесь ли вы сказать Visual Studio, чтобы она выполняла стандартную отладочную компиляцию и отправляла ее, или вы собираетесь редактировать пару параметров в компиляции выпуска? Тщательное изменение пары настроек в сборке Release показалось мне лучшим подходом.

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

0 голосов
/ 16 июня 2011

Я всегда отправляю отладочную сборку, а не сборку выпуска. Я не могу думать ни о каких недостатках, а о преимуществах, как вы упоминаете.

...