在IIS中部署.PDB文件。有什么好处?

时间:2008-12-19 17:00:03

标签: .net asp.net web-services iis

我正在为IIS的开发服务器部署ASP.NET和Web服务解决方案。看起来执行此作业的最后一个人也部署了所有.pdb文件。我询问了这个问题,并被告知如果它们留在服务器上,它们“会在日志中提供更好的堆栈跟踪信息”。

这有什么道理吗?我总是将它们留在后面,从不将它们部署到本地机器以外的任何地方。

对于内部开发IIS服务器(非生产,外部无法访问)是否有理由部署.pdb文件?有什么不好可能发生吗?他们真的能提供任何好处吗?

3 个答案:

答案 0 :(得分:38)

我总是认为.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级并引发异常。现在为运行时结果:

在同一文件夹中以调试构建 .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

作为发布构建 .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肯定会添加堆栈跟踪信息,并减慢异常处理速度。 非常有趣!

答案 1 :(得分:26)

如果要记录异常,那么部署PDB文件可确保异常包括行号(因此Steven A. Lowe已多次通知我;)

答案 2 :(得分:8)

如果您希望远程调试应用程序,

部署.pdb文件会很有帮助。

有一篇MSDN文章here解释了这个过程