2009-07-10 67 views

回答

21

您可以修改调试配置。例如,仅在调试配置中添加一个特殊的VM参数。您可以使用System.getProperties()来读取提供的参数。

更好的是,修改配置(运行和调试)来加载不同的日志记录配置文件。如果您需要编写代码来确定日志记录级别,这并不好。这应该只是一个配置问题。

2

如果要设置从您自己的程序调试级别,可能是这行:

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评论:

这是高度依赖系统。
我假设“共享”表示跨VM类共享处于活动状态。
这是一项非常新的功能,仅在某些平台上可用。
此外,可能有许多可能的原因来禁用它,所以我不会将它用于调试模式检测。

(注:我用最新jdk1.6b14测试它在我离开这个作为CW答案。)

+0

我想有可能是一个属性,但我从调试启动和运行启动(使用Eclipse 3.3,Java的1.6.0_13,Ubuntu的9.04)性质的完全转储的测试是相同的。 (我也试过只是你的属性,包括一个调试运行,我跨过了System.out行,并且运行和调试启动都给出了'混合模式' – gojomo 2009-07-10 11:46:26

+1

这是高度依赖于系统的,我假设“共享”表示跨VM类共享是主动的,这是一个非常新的特性,只在某些平台上可用,而且可能有很多可能的原因来禁用它,所以我不会将它用于调试模式检测。 – 2009-07-10 11:52:37

+1

@Joachim:。好一点(我与最新的JDK 1.6b14在这里)我会更新我的答案,并把它归档为社区维基 – VonC 2009-07-10 13:30:32

3

您是否尝试过在eclipse运行配置中添加vm参数?

喜欢的东西

-Dxxxx=true 

,您可以使用Boolean.getProperty("xxxx")进行检查。

7

没有一个官方认可的方式来可靠地确定,如果任何给定的JVM处于调试模式从JVM本身内,并依托文物只会破坏你的代码在未来的一段时间。

因此您需要自己介绍一种方法。建议:

  • 系统属性。
  • 环境变量(shell变量,比如$ HOME或%HOME%)
  • 询问JVM有关给定资源的物理位置 - http://www.exampledepot.com/egs/java.lang/ClassOrigin.html - 并在此基础上,做出决定(是否路径包含单词“调试“?它是在一个jar或一个解压后的类文件?等)。
  • JNDI
  • 的所有脑干或特定资源的内容。
相关问题