2008-12-19 9 views
23

Estoy implementando soluciones de servicio web y ASP.NET 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.Implementación de archivos .PDB en IIS. Cualquier beneficio?

¿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 alguna razón para implementar o no los archivos .pdb? ¿Hay algo malo que pueda pasar? ¿Realmente proporcionan algún beneficio?

Respuesta

26

Si está registrando excepciones, a continuación, el despliegue de los archivos PDB asegura que las excepciones incluyen números de línea (por lo Steven A. Lowe me ha informado en muchas ocasiones;))

+0

Entonces, ¿qué hace construir una aplicación en Release vs Debug? ¿cualquier cosa? Estoy acostumbrado al mundo de Java donde la depuración de compilación inserta la línea # sy otra información de depuración directamente en los archivos .class. – CodingWithSpike

+1

Enlace aquí: http://social.msdn.microsoft.com/Foros/es-ES/clr/thread/4de6861f-e723-4def-bcaf-aa717a3e1897/ Resumen en depuración: sin optimizaciones, atributo [Debuggable] agregado, PDB implementado, #IF DEBUG compilado condicionalmente incluido, #IF RELEASE código no incluido –

+1

+1 para deletrear mi nombre; ;) –

8

desplegar archivos .pdb es útil si desea depurar de forma remota su aplicación.

hay un artículo de MSDN here explicar el proceso

38

siempre me imaginé los archivos .pdb sólo eran utilizados por 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 sólo recursivamente 100 niveles de profundidad y produce una excepción. Ahora, para los resultados de tiempo de ejecución:

Operando como una depuración acumulación con la .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 

Correr como una depuración acumulació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 versiónconstruir con el 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 

Correr como una liberación construir 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 ejecuta desde un símbolo del sistema de edad regular, no dentro de Visual Estudio. Por lo tanto, el .pdb definitivamente agrega información de rastreo de pila, y ralentiza el manejo de excepciones. ¡Muy interesante!

+4

Buena investigación :) +1 –

+0

muy bueno para aprender – erdogany

+4

Probablemente debería ** enfatizarse ** que la ejecución más lenta solo ocurre con excepciones; de lo contrario, la impresión es que los archivos .pdb daño en el rendimiento, incluso con compilaciones de lanzamiento. No creo que el rendimiento se vea afectado si su código se ejecuta sin problemas y sin excepciones (por lo que no debe usar código de escritura que utilice excepciones para el control de bifurcación normal). –

Cuestiones relacionadas