Чтобы ответить на ваш первый вопрос, вам нужно включить PDB только в производственную версию, если вам нужны номера строк для отчетов об исключениях.
Чтобы ответить на ваш второй вопрос, использование флага «Оптимизировать» с PDB означает, что любой «крах» стека будет отражен в трассировке стека . Я не уверен, что фактический номер строки может быть неправильным - это требует дополнительного расследования.
Чтобы ответить на ваш третий вопрос, вы можете получить лучшее из обоих миров с довольно аккуратным приемом. Основные различия между сборкой отладки по умолчанию и сборкой выпуска по умолчанию заключаются в том, что при сборке выпуска по умолчанию оптимизация включена и символы отладки не генерируются. Итак, в четыре этапа:
Измените конфигурацию выпуска, чтобы выдавать символы отладки. Это практически не влияет на производительность вашего приложения и очень полезно, если (когда?) Вам нужно отладить сборку релиза вашего приложения.
Компиляция с использованием новой конфигурации сборки выпуска, то есть с символами отладки и с оптимизацией. Обратите внимание, что 99% оптимизации кода выполняется компилятором JIT, а не компилятором языка.
Создайте текстовый файл в папке вашего приложения с именем xxxx.exe.ini (или dll или любой другой), где xxxx - это имя вашего исполняемого файла. Этот текстовый файл должен изначально выглядеть так:
[.NET Framework Debugging Control]
GenerateTrackingInfo=0
AllowOptimize=1
С этими настройками ваше приложение будет работать на полной скорости. Если вы хотите отладить приложение, включив отслеживание отладки и, возможно, отключив (CIL) оптимизацию кода, просто используйте следующие параметры:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
РЕДАКТИРОВАТЬ Согласно комментарию cateye, это также может работать в размещенной среде , такой как ASP.NET.