我正在將IIS和Web服務解決方案部署到IIS,供開發服務器使用。它看起來像做這個工作的最後一個人也部署了所有的.pdb文件。我問了這個問題,並被告知,如果他們留在服務器上,他們會「在日誌中提供更好的堆棧跟蹤信息」。在IIS中部署.PDB文件。有什麼好處?
這有什麼道理嗎?我一直將它們留在後面,從不將它們部署到除本地機器以外的任何地方。
對於內部開發IIS服務器(不生產,外部世界不可訪問)是否有任何理由要或不要部署.pdb文件?有什麼可能發生的不好?他們真的提供任何好處嗎?
我正在將IIS和Web服務解決方案部署到IIS,供開發服務器使用。它看起來像做這個工作的最後一個人也部署了所有的.pdb文件。我問了這個問題,並被告知,如果他們留在服務器上,他們會「在日誌中提供更好的堆棧跟蹤信息」。在IIS中部署.PDB文件。有什麼好處?
這有什麼道理嗎?我一直將它們留在後面,從不將它們部署到除本地機器以外的任何地方。
對於內部開發IIS服務器(不生產,外部世界不可訪問)是否有任何理由要或不要部署.pdb文件?有什麼可能發生的不好?他們真的提供任何好處嗎?
如果你正在登錄異常,然後部署PDB文件確保例外包括行號(所以Steven A. Lowe已通知我在許多場合;))
部署.pdb文件是有益的,如果你想遠程調試你的申請。
有一個MSDN文章here講解過程中
我總的.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肯定會添加堆棧跟蹤信息,並減緩異常處理。 非常有趣!
那麼在Release vs Debug中構建應用程序是做什麼的?什麼?我習慣於在Java世界中編譯調試插入行#和其他調試信息直接到.class文件。 – CodingWithSpike 2008-12-19 17:59:59
鏈接:http://social.msdn.microsoft。COM /論壇/ EN-US/CLR /線程/ 4de6861f-e723-4def-BCAF-aa717a3e1897/ 在總結調試:不優化,[可調試]屬性補充,PDB的部署,#IF DEBUG條件編譯在內,#IF RELEASE代碼不包括在內。 – 2008-12-19 18:20:21