que - java netbeans paso a paso
¿Cómo puedo depurar un jar en tiempo de ejecución? (4)
Estoy en una posición bastante extraña (desde mi punto de vista java-novato):
utilizando Eclipse escribí un "programa java" (algunos archivos .java con clases) en el que esencialmente (por lotes) lee un archivo de texto * .csv, "evalúa" su contenido y escribe los resultados en un archivo de texto * _out.csv. Para localizar el archivo de entrada, utiliza un "selector de archivos" (se obtuvo una muestra de aquí: http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html )
Depuré todo el código y, usando el depurador, funciona .
Ejecuté el código (la clase principal, que llama a todos los demás en secuencia) y funciona , mientras que en Eclipse .
Exporté todo el contenido del proyecto a un archivo "jar ejecutable".
Tenga en cuenta que, aparte del selector de archivos, se trata principalmente de un "lote" que lee y escribe: casi ninguna interfaz de usuario. Mientras estaba en Eclipse, mostré algunos resultados internos usando algo como " if (debug) System.out.print (" algo para imprimir "); " proporcionar para establecer " debug " TRUE en la depuración y FALSE en el entorno de producción.
TODO lo anterior funcionó!
Ahora, iniciando el jar ejecutable (haga doble clic en el archivo jar, en Win / XP), puedo ver el selector de archivos y puedo usarlo pero, después de elegir el archivo de entrada ... nada más : (sin interfaz de usuario ) No sé si el archivo fue leído, no veo ningún archivo de salida generado, e incluso no tengo "consola" para listar ningún mensaje de depuración intermedio, para ver si el archivo está funcionando, incluso si estoy -exportarlo con la variable de depuración establecida en VERDADERO.
¿Hay alguna forma de "depurar en tiempo de ejecución" el archivo ejecutable (como MsgBox de VB, o algo más)? Algún tipo de "archivo de registro" que puedo "habilitar" o analizar? (obviamente, como mi archivo no está escribiendo el archivo de resultados, simplemente no puedo intentar escribir un * .log también). También tengo que decir que no puedo instalar otro que no sea Eclipse en mi máquina (y simplemente tuve suerte de que funcionara ), por lo que no hay herramientas de desarrollo habituales, utilidades y otras cosas útiles.
Aunque es un jar ejecutable, aún puede ejecutarlo desde una consola: abra una ventana de terminal, navegue hasta el directorio que contiene el jar y escriba "java -jar yourJar.jar". Se ejecutará en esa ventana de terminal, y la salida de sysout y syserr aparecerá allí, incluidos los seguimientos de pila de excepciones no detectadas. Asegúrese de tener su depuración configurada en verdadero. Y buena suerte.
Pensé en otra cosa: si estás en Win7, a menudo tiene problemas de permisos con las aplicaciones de usuario que escriben archivos en directorios específicos. Asegúrese de que el directorio en el que está escribiendo su archivo de salida sea uno para el que tenga permisos.
En un proyecto futuro, si es lo suficientemente grande, puede usar uno de los recursos de registro estándar para la salida de "depuración"; entonces será fácil (ier) redirigirlo a un archivo en lugar de depender de tener una consola. Pero para un trabajo más pequeño como este, esto debería estar bien.
Con IntelliJ IDEA
puede crear una configuración de tiempo de ejecución de la Jar Application
, seleccionar el JAR
, las fuentes, el JRE
para ejecutar el Jar
e iniciar la depuración. Here está la documentación.
Puede activar la capacidad de depuración de JVM al iniciar el comando java
con una opción especial:
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar path/to/some/war/or/jar.jar
Al iniciar jar.jar
esa manera en la línea de comandos se:
- ponga esta instancia de JVM en el rol de un servidor (
server=y
) que escucha en el puerto 8000 (address=8000
) - escriba
Listening for transport dt_socket at address: 8000
a laListening for transport dt_socket at address: 8000
y - luego pausa la aplicación (
suspend=y
) hasta que se conecte un depurador. El depurador actúa como el cliente en este escenario.
Las opciones comunes para seleccionar un depurador son:
- Eclipse Debugger: en Ejecutar -> Configuraciones de depuración ... -> seleccione Aplicación Java remota -> haga clic en el botón Nueva configuración de inicio. Proporcione un nombre arbitrario para esta configuración de depuración, Tipo de conexión: Estándar (Socket Attach) y, como Propiedades de conexión, las entradas Host: localhost , Puerto: 8000 . Aplicar los cambios y haga clic en Depurar . En el momento en que Eclipse Debugger se haya conectado correctamente a la JVM,
jar.jar
debería comenzar a ejecutarse. - Herramienta de línea de comandos
jdb -connect com.sun.jdi.SocketAttach:port=8000
conjdb -connect com.sun.jdi.SocketAttach:port=8000
http://www.eclipsezone.com/eclipse/forums/t53459.html
Básicamente ejecutarlo con:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044
La aplicación, en el inicio, esperará hasta que se conecte desde otra fuente.