Определите, работает ли Java-приложение в режиме отладки в Eclipse
Я хочу изменить уровень ведения журнала в зависимости от того, что я debbugging или нет, но я не могу найти фрагмент кода, чтобы проверить, работает ли приложение в режиме отладки.
Я использую eclipse для отладки приложения, поэтому, если решение работает только в Eclipse, это будет нормально.
Ответы
Ответ 1
Вы можете изменить конфигурацию отладки. Например, добавьте специальный аргумент VM только в конфигурации отладки. Вы можете использовать System.getProperties()
чтобы прочитать предоставленные аргументы.
Более того, измените конфигурации (Run и Debug), чтобы загрузить другой файл конфигурации ведения журнала. Это не хорошо, если вам нужно написать код для определения уровня ведения журнала. Это должно быть только вопросом конфигурации.
Ответ 2
Нашел ответ о том, как найти, если отладочный режим включен
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().
getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;
Это проверит, используется ли агент протокола отладки Java.
Ответ 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 при отладке.
Мана