.net - net - Despliegue de archivos.PDB en IIS. Cualquier beneficio?
svc service in iis (3)
Estoy implementando soluciones ASP.NET y de servicios web para IIS para un servidor de desarrollo . Parece que la última persona que hizo este trabajo implementó todos los archivos .pdb también. Le pregunté al respecto y me dijeron que "proporcionan una mejor información de rastreo de pila en los registros" si se dejan en el servidor.
¿Hay algo de cierto en esto? Siempre los he dejado atrás, nunca los he desplegado en ningún otro lugar que no sea mi máquina local.
Para un servidor IIS de desarrollo interno (no de producción, no accesible para el mundo exterior) ¿hay algún motivo para desplegar o no los archivos .pdb? ¿Hay algo malo que pueda pasar? ¿Realmente proporcionan algún beneficio?
La implementación de archivos .pdb es útil si desea depurar remotamente su aplicación.
hay un artículo de MSDN here explica el proceso
Si está registrando excepciones, la implementación de los archivos PDB garantiza que las excepciones incluyan números de línea (por lo que Steven A. Lowe me ha informado en muchas ocasiones;))
Siempre pensé que los archivos .pdb solo los usaba el depurador. Si el tiempo de ejecución siempre busca información de depuración, eso debería significar una ejecución más lenta al lanzar una excepción, porque tiene que leer el archivo .pdb, ¿verdad?
Así que hice una prueba rápida:
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);
}
}
}
}
Esto simplemente recursifica 100 niveles de profundidad y arroja una excepción. Ahora para los resultados de tiempo de ejecución:
Se ejecuta como una versión de depuración con .pdb en la misma carpeta:
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
Ejecutando como una construcción de depuración sin el .pdb:
C:/Work/PdbSpeedTest/bin/Debug>PdbSpeedTest.exe
at PdbSpeedTest.Program.Looper(Int32 x)
at PdbSpeedTest.Program.Main(String[] args)
15.6252
Ejecutando como una versión de lanzamiento con .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
Ejecutando como una versión de lanzamiento sin el .pdb:
C:/Work/PdbSpeedTest/bin/Release>PdbSpeedTest.exe
at PdbSpeedTest.Program.Looper(Int32 x)
at PdbSpeedTest.Program.Main(String[] args)
15.6252
Estos se ejecutaron desde un antiguo símbolo del sistema, no dentro de Visual Studio. Por lo tanto, el .pdb definitivamente agrega información de rastreo de pila, y ralentiza el manejo de excepciones. ¡Muy interesante!