2008-12-19 70 views
23

我正在将IIS和Web服务解决方案部署到IIS,供开发服务器使用。它看起来像做这个工作的最后一个人也部署了所有的.pdb文件。我问了这个问题,并被告知,如果他们留在服务器上,他们会“在日志中提供更好的堆栈跟踪信息”。在IIS中部署.PDB文件。有什么好处?

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

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

回答

26

如果你正在登录异常,然后部署PDB文件确保例外包括行号(所以Steven A. Lowe已通知我在许多场合;))

+0

那么在Release vs Debug中构建应用程序是做什么的?什么?我习惯于在Java世界中编译调试插入行#和其他调试信息直接到.class文件。 – CodingWithSpike 2008-12-19 17:59:59

+1

链接:http://social.msdn.microsoft。COM /论坛/ EN-US/CLR /线程/ 4de6861f-e723-4def-BCAF-aa717a3e1897/ 在总结调试:不优化,[可调试]属性补充,PDB的部署,#IF DEBUG条件编译在内,#IF RELEASE代码不包括在内。 – 2008-12-19 18:20:21

8

部署.pdb文件是有益的,如果你想远程调试你的申请。

有一个MSDN文章here讲解过程中

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 

他们是从一个普通的旧命令提示符中运行的可视化,而不是工作室。所以.pdb肯定会添加堆栈跟踪信息,并减缓异常处理。 非常有趣!