我正在将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