2011-09-13 31 views
5

¿Cómo puedo escribir el código que puede comportarse de manera diferente en tiempo de ejecución en modo "depuración" (invocado como "Depurar como aplicación Java" en eclipse) desde el modo "ejecutar" (por ejemplo, invocado como "Ejecutar como aplicación Java" en eclipse ")? Es decir, por ejemplo, el código puede imprimir" Haha, estás en depuración "cuando" Depurar como aplicación Java "pero no imprimir nada cuando" Ejecutar como aplicación Java "(no quiero agregar ningún argumento cuando invocando el método principal). ¿Hay algún método general para implementar esto que pueda funcionar en cualquier IDE, como eclipse, IntelliJ, etc.?¿Cómo sé que mi código se está ejecutando en modo "depuración" en IDE?

+0

Este tema se trata en este hilo: http://stackoverflow.com/questions/1109019/determine-if-a-java-application-is-in-debug-mode-in-eclipse –

Respuesta

7

Lo he implementado de la siguiente manera: Examino los parámetros de JVM y busco uno que sea -Xdebug. Por favor, vea el código.

private final static Pattern debugPattern = Pattern.compile("-Xdebug|jdwp"); 
public static boolean isDebugging() { 
    for (String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) { 
     if (debugPattern.matcher(arg).find()) { 
      return true; 
     } 
    } 
    return false; 
} 

Funciona para mí porque eclipse ejecuta una aplicación que se depura como un proceso separado y se conecta a ella mediante JDI (Java Debugging Interface).

que estaría feliz de saber si esto funciona con otros entornos de desarrollo (por ejemplo, IntelliJ)

+0

+1: 'debubg '?? ;) Puede establecer un campo estático para DEPURAR en lugar de crear un patrón estático ya que no esperaría que cambie. –

+0

Gracias, @Peter Lawrey. Parece que funcionó para mí porque agregué jdwp. Arreglaré esto en mi código. – AlexR

0

La diferencia entre estos modos es que en el modo de depuración su IDE se conectará a la aplicación recién ejecutada con un depurador (típicamente a través de un zócalo binario). Tener un depurador conectado permite que el IDE descubra puntos de interrupción, excepciones, etc. Esto no sucederá en el modo normal .

No existe una manera estándar y fácil de usar para distinguir entre el modo de depuración y el normal del código de Java.

Cuestiones relacionadas