.NET: запуск программы с отладочной информацией

#.net #debugging #compiler-construction

#.net #отладка #компилятор-построение

Вопрос:

Известно, что компиляция программы в «режиме отладки» (а не в «режиме выпуска») может привести к снижению производительности.

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

Я обнаружил, что это возможно, скомпилировав код в «режиме выпуска» и поместив файл *.pdb вместе с двоичными файлами в ту же папку.

Кто-нибудь знает, приводит ли прикрепление файла pdb к какой-либо проблеме с производительностью.

Спасибо

Комментарии:

1. Это хорошая практика, потому что, если вам когда-нибудь понадобится отладить рабочие двоичные файлы, у вас есть символы отладки, и это намного упрощает жизнь!

Ответ №1:

Это не должно вызвать никаких проблем с производительностью, поскольку DLL была скомпилирована в режиме выпуска. При возникновении исключения виртуальная машина .NET знает все о вашей трассировке стека, включая то, какая инструкция выполнялась в каждом методе стека, когда возникло исключение. Включение файла pdb просто дает ему возможность сопоставить эти данные с реальными именами файлов и номерами строк.

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

Ответ №2:

  • Компиляция в режиме выпуска generate .pdb не влияет на производительность
  • размещение файлов .pdb рядом с библиотеками dll для поиска отладочной информации приводит к очень небольшому снижению производительности только во время исключений — это незначительно. Это потребовало бы дополнительных затрат на поиск информации о стеке из сопоставления pdb.

Ответ №3:

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