В Visual Studio 2010 для проекта C #, если вы перейдете в Свойства проекта> Сборка> Дополнительно> Информация об отладке, у вас будет три варианта: нет, полный или только pdb. Основываясь на ответе на этот вопрос , я считаю, что понимаю некоторые различия между full и pdb-only. Однако что больше подходит для сборки выпуска? Если я использую «полный», будет ли производительность снижена? Если я использую "pdb-only", будет ли труднее отлаживать производственные проблемы?
В чем разница между "full" и "pdbonly"? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option
c#
visual-studio
debugging
build
debug-symbols
RationalGeek
источник
источник
Ответы:
Я бы построил с помощью
pdb-only
. Вы не сможете подключить отладчик к выпущенному продукту, но если вы получите аварийный дамп, вы можете использовать Visual Studio или WinDBG для проверки трассировки стека и дампа памяти во время сбоя.Если вы выберете
full
вместоpdb-only
, вы получите те же преимущества, за исключением того, что исполняемый файл может быть прикреплен непосредственно к отладчику. Вам нужно будет определить, разумно ли это для вашего продукта и клиентов.Обязательно сохраните файлы PDB где-нибудь, чтобы вы могли ссылаться на них при поступлении отчета о сбое. Если вы можете настроить сервер символов для хранения этих отладочных символов, тем лучше.
Если вы решите строить с
none
, у вас не будет выхода, когда в поле произойдет сбой. Вы не сможете провести какое-либо постфактумное исследование аварии, что может серьезно затруднить вашу способность отследить проблему.Примечание о производительности:
И Джон Роббинс, и Эрик Липперт написали в блогах сообщения о
/debug
флаге, и оба они указывают, что этот параметр не оказывает никакого влияния на производительность . Есть отдельный/optimize
флаг, который указывает, должен ли компилятор выполнять оптимизацию.источник
If you use /debug:full, be aware that there is some impact on the speed and size of JIT optimized code and a small impact on code quality with /debug:full. We recommend /debug:pdbonly or no PDB for generating release code.
ПРЕДУПРЕЖДЕНИЕ. Документация MSDN для параметра / debug (в Visual Studio это Debug Info) кажется устаревшей! Это то, что у него неверно
Тогда что верно сейчас?
Если они точно такие же, почему у нас есть эти варианты? Джон Роббинс (бог отладки Windows) обнаружил, что они существуют по историческим причинам.
затем он продолжает это доказывать.
Теперь оптимизация - это часть отдельного переключателя
/optimize
(в Visual Studio это называетсяOptimize code
).Короче говоря, независимо от настройки DebugInfo pdb-only или full, у нас будут одинаковые результаты. Рекомендуется избегать None, поскольку это лишит вас возможности анализировать аварийные дампы выпущенного продукта или подключенного отладчика.
источник
Release
типом отладки конфигурации по умолчанию, установленным наpdbonly
.Вам понадобится только PDB, но вы не захотите передавать файлы PDB пользователям. Однако наличие их для себя вместе с вашими двоичными файлами дает вам возможность загружать аварийные дампы в отладчик, такой как WinDbg, и видеть, где ваша программа действительно потерпела неудачу. Это может быть весьма полезно, когда ваш код дает сбой на машине, к которой у вас нет доступа.
Полная отладка добавляет в ваш код атрибут [Debuggable]. Это имеет огромное влияние на скорость. Например, некоторые оптимизации цикла могут быть отключены, чтобы упростить пошаговое выполнение. Кроме того, это оказывает небольшое влияние на процесс JIT, поскольку включает отслеживание.
источник
Я пишу обработчик необработанных исключений, и трассировка стека включает номер строки, когда используется pdb-only, в противном случае я просто получаю имя подпрограммы / функции, когда выбираю None.
Если я не распространяю .pdb, я не получаю номер строки в трассировке стека даже при сборке только для pdb.
Итак, я распространяю (развертывание XCOPY в локальной сети) pdb вместе с exe из моего приложения VB.
источник