Déterminer si une application java est en mode débogage dans Eclipse
je veux changer le niveau de journalisation en fonction du débogage ou non, mais je ne trouve pas de code pour vérifier si l'application est en mode débogage.
j'utilise eclipse pour déboguer l'application, donc si la solution ne fonctionne qu'avec Eclipse, tout ira bien.
6 réponses
vous pouvez modifier la Configuration de débogage. Par exemple, ajouter un argument VM spécial uniquement dans la Configuration de Debug. Vous pouvez utiliser le système.getProperties() pour lire les arguments fournis.
encore mieux, modifiez les configurations (exécution et débogage) pour charger un fichier de configuration de journalisation différent. Il n'est pas bon si vous avez besoin d'é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-trouver-si-debug-mode-est-permis
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().
getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
ceci vérifiera si L'agent Java Debug Wire Protocol est utilisé.
il n'y a pas de moyen officiellement autorisé pour déterminer de manière fiable si une JVM donnée est en mode de débogage depuis L'intérieur de la JVM elle-même, et en se basant sur des artéfacts, vous briserez votre code à un moment donné dans le futur.
vous aurez donc besoin d'introduire vous-même une méthologie. Suggestions:
- Un système de propriété.
- Une variable d'environnement (variable d'environnement $HOME ou %HOME%)
- demandez au JVM sur l'emplacement physique d'une ressource donnée - http://www.exampledepot.com/egs/java.lang/ClassOrigin.html et fondée sur l', à prendre votre décision (le chemin d'accès contient le mot "debug"? c'est dans un bocal ou dans un fichier de classe non emballé? etc.)
- JNDI
- L'existence ou le contenu d'une ressource particulière.
avez-vous essayé d'ajouter un argument vm dans la config eclipse run?
Passer cela comme une machine virtuelle, l'Argument de 151930920"
-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, peut être une ligne comme:
public static final boolean DEBUG_MODE = System.getProperty("java.vm.info", "").contains("sharing");
ferait l'affaire.
vient 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 debug
mixed mode
si exécuté avec l'application de débogage du lanceur
Joachim Sauer commentaires:
cela dépend fortement du système.
Je suppose que le "partage" indique que le partage de classe cross-VM est actif.
Cette fonctionnalité est très nouvelle et n'est disponible que sur certaines plateformes.
De plus, il peut y avoir de nombreuses raisons possibles pour l'activer ou la désactiver, donc je ne l'utiliserais pas pour la détection du mode de débogage.
(Note: je l'ai testé avec le dernier jdk1.6b14. Je laisse cela comme une réponse de CW.)
Avoir un coup d'oeil 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 lancée en mode debug. La seule chose que vous pouvez faire est de passer un argument à votre JVM lorsque vous déboguez.
Manu