visual studio proyecto para modo instalador este entre diferencia depurar depuracion debug crear configuracion compilacion cambie c# java .net debugging release

studio - ¿Tiene Java el modo de compilación ''Debug'' y ''Release'' como C#?



para depurar este modulo cambie la configuracion de compilacion del proyecto a modo de depuracion (3)

Es una práctica normal en Java liberar todo lo que se puede depurar. Para algunos proyectos que requieren ofuscación, podrían tener una compilación de lanzamiento, pero nunca he visto esto en 12 años de desarrollo de Java.

Las cosas como aserciones y mensajes de depuración generalmente se desactivan en el tiempo de ejecución para una instancia de producción, pero se pueden activar en cualquier momento (incluso dinámicamente) si es necesario.

En mi humilde opinión, es una buena práctica usar la misma construcción en cada entorno, no solo la misma fuente, sino los mismos JAR. Esto le da la mejor posibilidad de que, si funciona en prueba, funcionará en producción y si tiene un problema en la producción, puede volver a producirlo en la prueba.

Como tanto código Java está escrito de esta manera, el JIT es muy bueno para optimizar el código muerto que nunca se llama. Tanto es así que en mi humilde opinión la mayoría de los micro-"benchmarks" donde Java out realiza C ++, es cuando el benchmark no hace nada y el JIT es mejor para detectar esto. En mi humilde opinión, C ++ supone que el desarrollador es lo suficientemente inteligente como para no escribir código que no hace nada.

En C #, tenemos 2 modos para crear proyectos: Debug y Release , me pregunto si Java tiene lo mismo. Estoy usando IntelliJ IDEA como Java IDE y hasta ahora no he visto en ningún lugar configurar un modo de compilación como en VS IDE.


Estás preguntando por diferentes tipos de compilaciones para compilar en diferentes cosas, supongo. Por ejemplo, para tener Debug.WriteLine y Console.WriteLine.

"No, Java no tiene una coincidencia exacta para esa funcionalidad. Podría usar aspectos, o usar un contenedor IOC para inyectar diferentes clases de implementación". robó esto de la siguiente pregunta: compilación condicional de Java

(hay otras buenas respuestas para ti allí)


javac -g Generate all debugging info -g:none Generate no debugging info -g:{lines,vars,source} Generate only some debugging info

Puede elegir incluir símbolos de depuración en las clases compiladas (este es el valor predeterminado) o no hacerlo. No hay mucho beneficio para no hacer eso. Los archivos jar serán un poco más pequeños , pero el beneficio de rendimiento es mínimo (si corresponde). Sin estos símbolos, ya no obtendrá números de línea en los rastros de pila. También tiene la opción de incluir símbolos adicionales con nombres de variables locales (de manera predeterminada, solo hay nombres de archivos de origen y números de línea).

java -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions

También puede habilitar las aserciones en tiempo de ejecución (el valor predeterminado es desactivado), que a veces es útil durante el desarrollo y las pruebas. Esto tiene un impacto en el rendimiento (si el código en cuestión sí hizo uso de aserciones, lo que creo que es uncommon ).

Independientemente de cualquiera de estas configuraciones, la JVM siempre le permite adjuntar un depurador.

Lo que Java no tiene es una compilación condicional donde se compilaría un código completamente diferente en función de alguna configuración externa. Lo más cercano que puede obtener es algo como public static final boolean DEBUG_BUILD = true; en algún lugar de tu código y usa eso en las declaraciones if. Esto realmente hará que el compilador excluya el código que se vuelve inalcanzable, pero debe establecer esta constante en el código fuente.