Определите, работает ли Java-приложение в режиме отладки в Eclipse

Я хочу изменить уровень ведения журнала в зависимости от того, что я debbugging или нет, но я не могу найти фрагмент кода, чтобы проверить, работает ли приложение в режиме отладки.

Я использую eclipse для отладки приложения, поэтому, если решение работает только в Eclipse, это будет нормально.

Ответ 1

Вы можете изменить конфигурацию отладки. Например, добавьте специальный аргумент VM только в конфигурации отладки. Вы можете использовать System.getProperties() чтобы прочитать предоставленные аргументы.

Более того, измените конфигурации (Run и Debug), чтобы загрузить другой файл конфигурации ведения журнала. Это не хорошо, если вам нужно написать код для определения уровня ведения журнала. Это должно быть только вопросом конфигурации.

Ответ 3

Нет официально санкционированного способа надежно определить, находится ли какой-либо JVM в режиме отладки внутри самой JVM, и полагаясь на артефакты, в будущем будет просто разорвать ваш код.

Поэтому вам нужно будет ввести методологию самостоятельно. Предложения:

  • Системное свойство.
  • Переменная среды (переменная оболочки, например $HOME или% HOME%)
  • Спросите JVM о физическом расположении данного ресурса - http://www.exampledepot.com/egs/java.lang/ClassOrigin.html - и на основе этого сделайте свое решение (делает path содержит слово "debug"? это внутри фляги или файла без распаковки? и т.д.).
  • JNDI
  • Существо или содержание определенного ресурса.

Ответ 4

Вы пытались добавить аргумент vm в конфигурации запуска eclipse?

Передайте это как аргумент В.М.

-Ddebug=true

тогда вы можете выполнить Boolean.getBoolean("debug") чтобы проверить это.

Ответ 5

Если вы устанавливаете уровень отладки из своей собственной программы, может быть строка типа:

public static final boolean DEBUG_MODE = System.getProperty("java.vm.info", "").contains("sharing");

сделал бы трюк.

Просто протестируйте его в eclipse3.5:

package test;

public class Test
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        System.out.println(System.getProperty("java.vm.info", ""));
    }

}

отобразит:

mixed mode, sharing

если он запущен без отладки

mixed mode

если выполняется с помощью отладочной программы запуска


Joachim Sauer комментарии:

Это очень зависит от системы.
Я предполагаю, что "совместное использование" означает, что совместное использование классов между виртуальными машинами активно.
Это очень новая функция и доступна только на некоторых платформах.
Кроме того, может быть много возможных причин, чтобы включить или отключить его, поэтому я бы не использовал это для обнаружения в режиме отладки.

(Примечание: я тестировал его с последним jdk1.6b14. Я оставляю это как ответ CW.)

Ответ 6

Посмотрите здесь:

http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F

Кроме того, я думаю, вы не можете знать, запущено ли приложение в режиме отладки. Единственное, что вы можете сделать, это передать аргумент вашей JVM при отладке.

Мана