2008-10-07 17 views
49

Parece que eltraza vs Depurar en .NET BCL

son en gran parte del mismo, con la notable excepción de que el uso de depuración se compila a cabo en una configuración de lanzamiento.

¿Cuándo utilizarías una y no la otra? La única respuesta a esto que he desenterrado hasta ahora es solo que utilizas la clase Debug para generar resultados que solo ves en la configuración de depuración, y Trace se mantendrá en una configuración de lanzamiento, pero eso realmente no responde la pregunta en mi cabeza

Si vas para instrumentar el código, ¿por qué se ha consumido alguna vez depuración, ya traza se puede desactivar sin recompilación?

Respuesta

48

La diferencia principal es la que indicas: Debug no está incluido en la versión, mientras que Trace sí lo está.

La diferencia prevista, según tengo entendido, es que los equipos de desarrollo pueden usar Debug para emitir mensajes ricos y descriptivos que pueden resultar demasiado detallados (o reveladores) para los consumidores de un producto, mientras que Trace está destinado a emitir los tipos de mensajes que están más específicamente orientados a instrumentar una aplicación.

Para responder a su última pregunta, no puedo pensar en una razón para usar Debug para instrumentar un código que pretendía lanzar.

Espero que esto ayude.

+6

Estoy totalmente en desacuerdo con esta respuesta. El seguimiento es un nivel inferior al de depuración y nunca debe utilizarse en producción. En mi experiencia, el rastreo se usa al inicio de los métodos o "rastreo" de una obra a medida que pasa por un flujo de trabajo y, de alguna manera, muestra la pila de llamadas. Todo lo anterior e incluyendo Info debe ser los únicos niveles utilizados en la producción. Eso es información, advertencia, error, fatal. –

+0

Creo que otra diferencia es que puede configurar [Trace Listeners] (http://msdn.microsoft.com/en-us/library/4y5y10s7 (v = vs.110) .aspx) en su aplicación y enrutar la salida de la huella en consecuencia. El escucha de seguimiento predeterminado en Visual Studio dirigirá los mensajes de seguimiento a la secuencia de salida de depuración. – orad

+6

El rastreo es algo que ** debe ** usarse en producción. Es tan importante que ** cada ** subsistema de Windows contenga código de rastreo. Cada búsqueda de disco duro, cada asignación de memoria, cada interrupción, cambio de contexto de CPU, cada programación de subprocesos tiene un código de rastreo integrado. La plataforma Event Tracing for Windows (ETW) es un sistema de rastreo extraordinariamente liviano que cualquier persona puede habilitar en cualquier momento en cualquier PC con Windows. El [System.Diagnostics.Tracing.EventSource] (https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) es la forma administrada de enviar eventos de seguimiento a ETW. –

3

Me gustaría utilizar log4net para el seguimiento, ya que sus capacidades son mucho más flexibles y robustas.

Pero para los verdaderos mensajes de depuración que nunca pretendo ver para nadie más que yo o un probador interno, probablemente me quedaré con Debug.

+0

La pregunta sobre qué estructura de inicio de sesión es preferible muestra que log4net no es más flexible o robusto que otros. http://stackoverflow.com/questions/4775194/when-should-i-use-tracing-vs-logger-net-enterprise-library-log4net-or-ukadc-di – sam

1

Has respondido tu propia pregunta. Si los mensajes de depuración permanecían, las personas podían verlos. Por ejemplo, digamos que usted hace:

 
Debug.WriteLine("Connecting to DB with username: blah and PW: pass"); 

Cualquiera que decompiles su código puede ver eso. Pero eso puede ser algo de vital importancia para que usted lo sepa durante las pruebas.

Trace es diferente. Si vas a hacer Trace, probablemente solo use log4net.

2

Para bloques de código sensibles al alto rendimiento, dejar Trace compilado pero deshabilitado puede hacer una diferencia en el rendimiento.

3

La única diferencia entre trace y debug es que las instrucciones de seguimiento se incluyen de forma predeterminada en el programa cuando se compila en una compilación de lanzamiento, mientras que la instrucción de depuración no lo es.

Por lo tanto, la clase de depuración se utiliza principalmente para la depuración en la fase de desarrollo, mientras el trazado se puede utilizar para pruebas y optimización después de la aplicación se compila y se libera.

+2

Esto depende por completo de la constante de compilación TRACE que está presente, que es el valor predeterminado para Depurar y liberar. –

5

La depuración se utiliza para depuración pura. Emite mensajes enriquecidos en la ejecución de depuración (modo de depuración).

Trace ayuda en la depuración de aplicaciones, corrección de errores y creación de perfiles (después del lanzamiento).

La clase Debug no sirve de nada en el modo de lanzamiento.

+1

Esto depende completamente de las constantes de compilación TRACE y DEBUG. –

+0

@VincePanuccio La configuración de compilación predeterminada es lo que es porque Debug and Trace están destinados a ser utilizados como lo indica esta respuesta. Sí, puede cambiar las constantes TRACE y DEBUG para obtener un comportamiento diferente, pero no es en lo que se diseñan las dos clases. – Darryl