Ответ 1
Если вы регистрируете исключения, тогда развертывание файлов PDB гарантирует, что исключения включают номера строк (так что Стивен А. Лоу неоднократно сообщал мне;))
Я развертываю решения ASP.NET и веб-службы для IIS для сервера разработки. Похоже, что последний человек, который выполнил эту работу, также развернул все файлы .pdb. Я спросил об этом, и мне сказали, что они "обеспечивают лучшую информацию о трассировке стека в журналах", если они оставлены на сервере.
Есть ли в этом правда? Я всегда оставил их, никогда не развертывая их нигде, кроме локальной машины.
Для внутренней разработки Сервер IIS (а не для производства, недоступный для внешнего мира) есть ли какие-либо причины для развертывания файлов .pdb или нет. Есть что-то плохое, что может случиться? Действительно ли они приносят какую-либо пользу?
Если вы регистрируете исключения, тогда развертывание файлов PDB гарантирует, что исключения включают номера строк (так что Стивен А. Лоу неоднократно сообщал мне;))
Я всегда думал, что файлы .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 уровней и создает исключение. Теперь для результатов выполнения:
Выполнение debug сборки с.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
Выполнение отладки без.pdb:
C:\Work\PdbSpeedTest\bin\Debug>PdbSpeedTest.exe
at PdbSpeedTest.Program.Looper(Int32 x)
at PdbSpeedTest.Program.Main(String[] args)
15.6252
Выполнение release с с.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
Запуск без.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 определенно добавляет информацию о трассировке стека и замедляет обработку исключений. Очень интересно!
развертывание файлов .pdb полезно, если вы хотите удаленно отлаживать ваше приложение.
есть статья MSDN здесь, объясняя процесс