c# - Trace vs Debug en.NET BCL
debugging instrumentation (7)
Parece que el
son básicamente los mismos, con la notable excepción de que el uso de Debug se compila en una configuración de lanzamiento.
¿Cuándo usarías uno y no el otro? La única respuesta a esto que he desenterrado hasta ahora es solo que usas la clase Debug para generar resultados que solo ves en la configuración de depuración, y Trace permanecerá en una configuración de lanzamiento, pero eso realmente no responde la pregunta en mi cabeza.
Si va a instrumentar su código, ¿por qué alguna vez usaría Debug , ya que Trace se puede desactivar sin una recompilación?
Consideraría usar log4net para el rastreo 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.
Esta es la diferencia total entre Trace y Debug: Tanto Debug como Trace usan el espacio de nombres System.Diagnostics.
Depurar
- Utiliza la clase Debug.
- Se usa en la construcción de depuración.
- Utiliza el tiempo de desarrollo de la aplicación.
- En el modo de depuración, el compilador inserta un código de depuración dentro del ejecutable.
- La clase de depuración funciona solo en modo de depuración.
- El análisis de rendimiento no puede hacerse usando Debug.
- La depuración se usa para encontrar un error en el programa.
- Para depurar podemos usar el método Debug.Write ().
- La depuración se ejecuta en el mismo hilo que la ejecución del programa principal.
Rastro
- Utiliza la clase Trace.
- La instrucción Trace incluye de forma predeterminada cuando el programa se compila en la compilación liberada.
- La clase Trace se usa para probar y optimizar incluso después de compilar y lanzar una aplicación.
- La clase Trace funciona tanto en el modo Depuración de casos como en el modo de lanzamiento.
- El seguimiento se ejecuta en una cadena de ejecución de subproceso diferente.
- Para Trace podemos usar el método Trace.Write ().
- Utiliza el tiempo de implementación de la aplicación.
referencia: esquina csharp
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 se incluye.
Por lo tanto, la clase de depuración se usa principalmente para la depuración en la fase de desarrollo, mientras que la traza se puede usar para probar y optimizar una vez que se compila y se libera la aplicación.
La depuración se usa 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 es útil en el modo de lanzamiento.
La principal diferencia es la que usted indica: Debug no está incluido en la versión, mientras que Trace sí lo está.
La diferencia intencionada, según tengo entendido, es que los equipos de desarrollo podrían usar Debug para emitir mensajes descriptivos y enriquecedores que podrían resultar demasiado detallados (o reveladores) para el consumidor (o los consumidores) de un producto, mientras que Trace pretende 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 fragmento de código que tenía la intención de lanzar.
Espero que esto ayude.
Para bloques de código sensibles al alto rendimiento, dejar Trace compilado pero deshabilitado puede hacer una diferencia en el rendimiento.
Usted ha respondido su propia pregunta. Si los mensajes de depuración permanecían, las personas podían verlos. Por ejemplo, supongamos que lo haces:
Debug.WriteLine("Connecting to DB with username: blah and PW: pass");
Cualquiera que descompile tu 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.