¿Cuál es el uso de la directiva de preprocesador #if DEBUG
en C#? ¿Cuándo debemos usar esto?¿Cuál es el uso de la directiva de preprocesador #if DEBUG en C#? ¿Cuándo debemos usar esto?
Respuesta
en modo de depuración:
#if DEBUG
System.Console.WriteLine("Debug version");
#endif
System.Console.WriteLine("Output");
de salida como
Debug version
Output
En el modo de salida:
#if DEBUG
System.Console.WriteLine("Debug version");
#endif
System.Console.WriteLine("Output");
de salida como
Output
leyeron: #if (C# Reference)
Uso: Si usted tiene un conjunto de valores para ser probado en el modo de depuración y no en el modo de liberación puede utilizar #if DEBUG
No tiene que usarlo en absoluto. El propósito de esto es tener secciones de código que solo se compilan en modo de depuración. p.ej. Es posible que tenga algún código que habilite a un usuario maestro, que podría pretender ser cualquier otro usuario en el sistema para probar y depurar los objetivos. No querría que el usuario esté habilitado en el código de lanzamiento por razones de seguridad, por lo que podría envolver las secciones relevantes del código en #if DEBUG y se excluirían del código de lanzamiento.
Al compilar, puede establecer indicadores de compilación que puede usar para poner el código en esas directivas. Ese código no se compilará y nunca terminará en el resultado del ensamblaje final. DEBUG es uno de los predefinidos, pero puede usar el suyo.
Como ejemplo de uso: en uno de los desarrollos actuales usamos un indicador de compilador para indicar si se debe utilizar una máscara de inicio de sesión para iniciar sesión en un usuario o si el inicio de sesión debe realizarse automáticamente con el principal actual. El segundo modo es solo para los desarrolladores, p. depurar más rápido sin tener que iniciar sesión.
Otro ejemplo: en algún código mono, verá banderas. En este caso, el código se puede compilar de manera diferente cuando, p. apuntar a un marco diferente, ya que utiliza clases que pueden no existir en versiones anteriores.
Relacionados con esto es el Condicional -Atributo con el que puede marcar un método. Si dicho indicador no está configurado, las llamadas al método no se realizarán. El método aún termina en IL, pero las llamadas se eliminarán.
Comprobar por ejemplo siguiente código:
var mthods = typeof (Debug).GetMethods().Where(mi => mi.Name.Equals("WriteLine")).ToList();
var attribs = mthods[0].GetCustomAttributes(true);
Usted se dará cuenta de que el método Debug.WriteLine tiene el atributo condicional que se le aplica: Las llamadas a que se eliminará cuando se compila sin el indicador de depuración del compilador.
Es posible que se sienta más cómodo con el atributo Conditional
, que puede ser utilizado para excluir métodos enteras, sin necesidad de complicar la fuente con los condicionales en el lado llamante:
[Conditional("DEBUG")]
void Foo()
{
}
Foo()
se puede llamar de forma segura, tanto en depurar y liberar - sin embargo, en el modo de lanzamiento, sería un no-op.
¿Qué es un 'no-op'? – gingerbreadboy
Es un comando especial de IL que básicamente dice "no hacer nada". Es especialmente útil cuando coloca puntos de interrupción en lugares donde no ocurre nada (por ejemplo, un corchete abierto), de esa manera el depurador puede sincronizar el código y ejecuta IL – flq
+1 para no-op. bellamente explicado ... –
también es útil al probar servicios de Windows. Puede poner #if DEPURAR para iniciar su proceso manualmente, para que no tenga que instalar el servicio y adjuntarlo a la depuración.
- 1. Diferencia entre la directiva de preprocesador #if y normal si
- 2. Directiva de preprocesador "Design Mode"
- 3. Directiva de depuración y preprocesador
- 4. ¿Cuándo debemos usar el operador verificado en C#?
- 5. ¿Cuándo debemos usar la palabra clave extern alias en C#?
- 6. Preprocesador C# expresión if
- 7. ¿Cuál es el uso de #if en C#?
- 8. Delphi #IF (DEBUG) equivalente?
- 9. Cuándo deberíamos usar la clase y cuándo no debemos
- 10. Objective-C para la directiva de preprocesador 'si no'
- 11. ¿Cuándo es (esto! = Esto) en C++?
- 12. Portabilidad de la directiva de preprocesador #warning
- 13. condicional ("Test") + #if DEBUG
- 14. ¿Cuál es el propósito de la directiva #define en C++?
- 15. C++, usando la directiva condicional #if VERDADERO
- 16. #DEBUG Declaraciones de preprocesador en la página ASPX
- 17. ¿Debo incluir las llamadas a Debugger.Log() en #if (DEBUG)?
- 18. ¿Cuál es el significado de la directiva {$ C PRELOAD}?
- 19. Directiva de preprocesador #ifndef para C/C++ código
- 20. ¿Cuándo, si alguna vez, debemos usar const?
- 21. C#: escribir MSIL para agregar una directiva de preprocesador
- 22. httpmodules httfandlers, ¿cuál es el uso ideal de ellos? cuándo usar y cuándo no usar?
- 23. SPL vs. Array: ¿Cuándo deberíamos usar SPL y cuándo debemos usar Array en PHP?
- 24. C preprocesador con la sentencia if
- 25. ¿Por qué alguien usaría una directiva de preprocesador #if 1 C?
- 26. ¿Cuál es el uso de la palabra clave global :: en C#?
- 27. Expansión de macro del preprocesador a otra directiva de preprocesador
- 28. Cuándo utilizar 'if ... else if' y cuándo usar
- 29. ¿Cuál es el uso de setupUi (esto) en Qt
- 30. Defines.Debug vs DEBUG #if
O, simplemente, no se mostrará la pantalla de bienvenida al depurar , ahorrando un segundo o dos. Cosas como esas. – TomTom
@TomTom: ¿qué tal, no muestres la pantalla de bienvenida * ever *? – MusiGenesis