Je souhaite modifier le niveau de journalisation en fonction du débogage ou non, mais je ne trouve pas d'extrait de code pour vérifier si l'application s'exécute en mode débogage.
J'utilise Eclipse pour déboguer l'application, donc si la solution ne fonctionne que dans Eclipse, tout ira bien.
Vous pouvez modifier la configuration de débogage. Par exemple, ajoutez un argument spécial VM uniquement dans la configuration de débogage. Vous pouvez utiliser System.getProperties()
pour lire les arguments fournis.
Encore mieux, modifiez les configurations (Run et Debug) pour charger un fichier de configuration de journalisation différent. Ce n'est pas bon si vous devez écrire du code pour déterminer le niveau de journalisation. Cela ne devrait être qu'une question de configuration.
Trouvé la réponse sur comment-savoir-si-le mode de débogage est activé
boolean isDebug = Java.lang.management.ManagementFactory.getRuntimeMXBean().
getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
Cela vérifiera si l'agent Java Debug Wire Protocol est utilisé.
Il n'y a pas de moyen officiellement approuvé pour déterminer de manière fiable si une JVM donnée est en mode débogage depuis l'intérieur de la JVM elle-même, et s'appuyer sur des artefacts ne fera que casser votre code dans le futur.
Vous devrez donc introduire vous-même une méthologie. Suggestions:
Avez-vous essayé d'ajouter un argument vm dans la configuration d'exécution d'Eclipse?
Passez ceci comme un argument VM
-Ddebug=true
alors vous pouvez faire Boolean.getBoolean("debug")
pour vérifier cela.
Si vous définissez le niveau de débogage à partir de votre propre programme, il peut s'agir d'une ligne comme:
public static final boolean DEBUG_MODE = System.getProperty("Java.vm.info", "").contains("sharing");
ferait l'affaire.
Je viens de le tester dans Eclipse3.5:
package test;
public class Test
{
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println(System.getProperty("Java.vm.info", ""));
}
}
affichera:
mixed mode, sharing
si lancé sans débogage
mixed mode
s'il est exécuté avec le lanceur de débogage
Joachim Sauer commentaires:
Cela dépend fortement du système.
Je suppose que le "partage" indique que le partage de classes entre VM est actif.
Ceci est une toute nouvelle fonctionnalité et n'est disponible que sur certaines plates-formes.
De plus, il peut y avoir de nombreuses raisons possibles pour l'activer ou le désactiver, donc je ne l'utiliserais pas pour la détection en mode débogage.
(Remarque: je l'ai testé avec le dernier jdk1.6b14. Je laisse cela comme une réponse CW.)
Jetez un œil ici:
http://wiki.Eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F
De plus, je pense que vous ne pouvez pas savoir si votre application est exécutée en mode débogage. La seule chose que vous pouvez faire est de passer un argument à votre machine virtuelle Java lorsque vous déboguez.
Manu