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.¿Java tiene el modo de compilación 'Debug' y 'Release' como C#?
Respuesta
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 (esta es la configuración predeterminada) o no hacerlo. No hay mucho beneficio para no hacer eso. Los archivos jar serán a little smaller, 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 additional symbols with local variable names (de manera predeterminada solo hay nombres de archivos de fuente y números de línea).
java
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions
También puede activar afirmaciones en tiempo de ejecución (por defecto está desactivada), lo cual es a veces útil durante el desarrollo y pruebas. Esto tiene un impacto en el rendimiento (si el código en cuestión sí hizo uso de aserciones, 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á un código completamente diferente en función de alguna configuración externa. Lo más cercano que puede obtener es algo así como public static final boolean DEBUG_BUILD = true;
en algún lugar de su código y use 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.
de todos modos para hacer 'public static final boolean DEBUG_BUILD' en preproceso, algo así como' # ifdebug' en C#? – JatSing
@JatSing: No directamente. Podría tener algún tipo de script que actualice el valor antes de iniciar el compilador. O tal vez tener un Constants.java y dos versiones de eso, y establecer el classpath de compilación para uno de ellos. Pero nada en la cadena de herramientas oficial. – Thilo
Usted está pidiendo diferentes tipos de construcciones 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 desde la siguiente pregunta: Conditional Java compilation
(hay otras respuestas agradables para que allí)
Es una práctica normal en Java para liberar todo es una forma 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 todos los entornos, no solo en la misma fuente sino también en 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 en la optimización de 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.
"Nunca he visto esto en 12 años de desarrollo de Java". Para mí, esa es la parte más relevante de su respuesta, ya que está escribiendo Java para HFT (!). ¿Eso significa que compilar código Java para incluir toda la información de depuración no/interfiere con el JVM JIT? Supongo que sí, pero busca la confirmación. – kevinarpe
- 1. ¿Cómo hacer una compilación diferente entre Debug y Release?
- 2. C# Debug vs Release
- 3. Release Mode vs Debug = "false"
- 4. Compilador .NET - DEBUG vs. RELEASE
- 5. El comando Simple OpenCV funciona en modo Debug pero no en modo Release
- 6. Release vs Debug Build Times
- 7. Diferencia de dependencia entre Release & Debug
- 8. Cómo compilar Debug y Release para un proyecto de TeamCity
- 9. C# ¿Las sentencias Debug se compilan cuando se ejecuta en modo Release?
- 10. Xcode/iOS: ¿Cómo determinar si el código se está ejecutando en la compilación DEBUG/RELEASE?
- 11. Modo de compilación: RelWithDebInfo
- 12. Visual Studio 2008 - Falta la barra de herramientas 'Release'/'Debug' configuración de compilación desplegable
- 13. ¿Cuál es la diferencia clave entre una compilación 'Debug' y 'Release' en .NET?
- 14. Release-Debug Builds para la aplicación de Android
- 15. Referencia a Library Binary - Debug o Release version?
- 16. .Net Release build trabajando más lento que Debug
- 17. ¿Mejores prácticas y herramientas para eliminar las diferencias entre compilaciones de Debug y Release?
- 18. ¿Cómo saber si se compiló una aplicación .NET en modo DEBUG o RELEASE?
- 19. ¿Msbuild reconoce alguna configuración de compilación que no sea DEBUG | RELEASE
- 20. Excluir archivos de la compilación en Debug
- 21. Confundido sobre las carpetas Release/Debug en Visual Studio 2010
- 22. ¿Tiene C# un Tokenizer de cadenas como el de Java?
- 23. Xcode Modo DEBUG: ¿cuándo está encendido/apagado?
- 24. Cómo especificar diferentes directorios de salida de Debug/Release en el archivo .pro de QMake
- 25. ¿Cómo evitan los lenguajes como C# y Java C/C++, como la compilación independiente?
- 26. ¿Cómo identificar si una biblioteca es creación DEBUG o RELEASE?
- 27. ¿Tiene que implementar el archivo .pdb compilando bajo release?
- 28. ¿Cuál es la diferencia entre compilation debug = "false" y Release mode?
- 29. El código de Protobuf java tiene errores de compilación
- 30. ¿Cuál es la diferencia entre el modo de depuración y el modo de lanzamiento en Visual Studio 2010?
¿Ha buscado en la web algo así como ** java using assert **? en cuanto a IDEA, si nos fijamos en /bin/idea.exe.vmoptions lo más probable es que descubra que se ejecuta en el modo 'Debug' en sí, si hay configuración' -ea' presente :) –
gnat
@gnat, sí, hay configuración '-ea' en' idea.exe.vmoptions'.Pero ¿qué ocurre cuando se construye un artefacto (un archivo jar), todavía en el modo 'Debug' con un artefacto? – JatSing
en el archivo vmoptions, '-ea' impacta cómo se ejecuta IDEA (¿es una aplicación java que conoces?) ** no ** el código que crea. En cuanto a los frascos, administras su modo en tiempo de ejecución especificando u omitiendo '-ea'. Como escribí, solo busque en la web para java, afirme que hay muchos tutoriales en ese – gnat