确定Eclipse中的Java应用程序是否处于调试模式

问题描述 投票:35回答:6

我想改变日志记录级别,具体取决于我是否正在进行调试,但是我找不到代码片段来检查应用程序是否在调试模式下运行。

我正在使用eclipse来调试应用程序,所以如果解决方案只能在Eclipse中运行,那就没问题了。

java eclipse debugging logging
6个回答
21
投票

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

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


50
投票

how-to-find-out-if-debug-mode-is-enabled找到了答案

boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().
    getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;

这将检查是否使用了Java Debug Wire Protocol代理。


7
投票

没有一种官方认可的方法来可靠地确定任何给定的JVM是否处于来自JVM本身的调试模式,并且依赖于工件将在未来的某个时间中破坏您的代码。

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

  • 系统属性。
  • 环境变量(shell变量,如$ HOME或%HOME%)
  • 向JVM询问给定资源的物理位置 - http://www.exampledepot.com/egs/java.lang/ClassOrigin.html - 并根据它来做出决定(路径是否包含单词“debug”?它是在jar或解压缩的类文件中吗?等等)。
  • JNDI
  • 特定资源的存在或内容。

5
投票

你试过在eclipse运行配置中添加一个vm参数吗?

将其作为VM参数传递

-Ddebug=true

然后你可以做Boolean.getBoolean("debug")检查这个。


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
投票

看看这里:

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

此外,我想你不知道你的应用程序是否在调试模式下运行。您可以做的唯一事情是在调试时将参数传递给JVM。

我的

© www.soinside.com 2019 - 2024. All rights reserved.