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.

32
demandé sur Serxipc 2009-07-10 15:25:56

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.

21
répondu kgiannakakis 2009-07-10 12:07:52

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é.

45
répondu topgun_ivard 2017-05-23 12:17:36

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.
7
répondu Thorbjørn Ravn Andersen 2014-07-11 19:10:39

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.

4
répondu J-16 SDiZ 2018-09-19 06:33:29

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.)

2
répondu VonC 2017-05-23 12:10:22

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

0
répondu Manuel Selva 2009-07-10 11:39:14