Развертывание файлов .PDB в IIS. Любая выгода? - PullRequest
23 голосов
/ 19 декабря 2008

Я развертываю решения ASP.NET и веб-служб для IIS для сервера development . Похоже, что последний, кто выполнил эту работу, тоже развернул все файлы .pdb. Я спросил об этом, и мне сказали, что они «предоставляют лучшую информацию трассировки стека в журналах», если они остаются на сервере.

Есть ли в этом правда? Я всегда оставлял их позади, никогда не развертывал их где-либо, кроме моей локальной машины.

Для внутреннего сервера разработки IIS (не производственного, недоступного для внешнего мира) есть ли причина для развертывания файлов .pdb или нет? Что-нибудь плохое может случиться? Они действительно дают какую-то выгоду?

Ответы [ 3 ]

38 голосов
/ 19 декабря 2008

Я всегда считал, что файлы .pdb использовались только отладчиком. Если среда выполнения всегда проверяет их на предмет отладочной информации, это должно означать более медленное выполнение при возникновении исключения, поскольку оно должно читать .pdb, верно?

Итак, я сделал быстрый тест:

using System;
using System.Text;

namespace PdbSpeedTest
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime start = DateTime.Now;
            try
            {
                Program p = new Program();
                p.Looper(0);
            }
            catch (NotImplementedException e)
            {
                Console.WriteLine(e.StackTrace);
            }
            TimeSpan span = DateTime.Now - start;
            Console.WriteLine(span.TotalMilliseconds.ToString());
        }

        internal void Looper(int x)
        {
            try
            {
                if (x < 100)
                    Looper(x + 1);
                else
                    throw new NotImplementedException("blah!");
            }
            catch (NotImplementedException e)
            {
                throw new NotImplementedException("blah!", e);
            }
        }
    }
}

Это просто повторяет 100 уровней и создает исключение. Теперь для результатов выполнения:

Запуск в качестве отладки build с .pdb в той же папке:

C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x) in C:\Work\PdbSpeedTest\Program.cs:line 37
   at PdbSpeedTest.Program.Main(String[] args) in C:\Work\PdbSpeedTest\Program.cs:line 16
31.2504

Запуск в качестве отладки build без .pdb:

C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x)
   at PdbSpeedTest.Program.Main(String[] args)
15.6252

Работает как релиз build с .pdb:

C:\Work\PdbSpeedTest\bin\Release>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x) in C:\Work\PdbSpeedTest\Program.cs:line 37
   at PdbSpeedTest.Program.Main(String[] args) in C:\Work\PdbSpeedTest\Program.cs:line 16
31.2504

Работает как релиз build без .pdb:

C:\Work\PdbSpeedTest\bin\Release>PdbSpeedTest.exe
   at PdbSpeedTest.Program.Looper(Int32 x)
   at PdbSpeedTest.Program.Main(String[] args)
15.6252

Они запускались из обычной старой командной строки, а не из Visual Studio. Так что .pdb определенно добавляет информацию трассировки стека и замедляет обработку исключений. Очень интересно!

26 голосов
/ 19 декабря 2008

Если вы регистрируете исключения, то развертывание файлов PDB гарантирует, что исключения включают номера строк (поэтому Стивен А. Лоу много раз сообщал мне;))

8 голосов
/ 19 декабря 2008

Развертывание файлов .pdb полезно, если вы хотите удаленно отлаживать приложение.

здесь есть статья MSDN здесь , объясняющая процесс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...