2008-12-19 32 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肯定會添加堆棧跟蹤信息,並減緩異常處理。 非常有趣!

相關問題