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

yyhrrdl8  于 2023-01-05  发布在  Eclipse
关注(0)|答案(7)|浏览(186)

我想根据我是否在调试来更改日志级别,但是我找不到一个代码片段来检查应用程序是否在调试模式下运行。
我使用Eclipse来调试应用程序,所以如果解决方案只在Eclipse中工作就可以了。

h9a6wy2h

h9a6wy2h1#

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

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

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

ffscu2ro

ffscu2ro2#

可以修改调试配置。例如,仅在调试配置中添加特殊VM参数。可以使用System.getProperties()读取提供的参数。
更好的是,修改配置(Run和Debug)以加载不同的日志配置文件。如果您需要编写代码来确定日志级别,这是不好的。这应该只是一个配置问题。

30byixjq

30byixjq3#

没有一种官方认可的方法可以从JVM本身内部可靠地确定任何给定的JVM是否处于调试模式,依赖工件只会在将来的某个时候破坏代码。
因此,您需要自己介绍一种方法。

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

7kjnsjlb4#

您是否尝试过在eclipse运行配置中添加一个vm参数?
将其作为VM参数传递

-Ddebug=true

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

nbewdwxp

nbewdwxp5#

如果您从自己的程序设置调试级别,则可能是类似以下的行:

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类共享处于活动状态。
这是一项非常新的功能,仅在某些平台上可用。
此外,启用或禁用它可能有很多原因,所以我不会将其用于调试模式检测。
(Note:我用最新的JDK1. 6 B14测试过了。我把这个作为CW答案留下。)

1yjd4xko

1yjd4xko6#

看看这里:
http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F
此外,我认为你无法知道你的应用是否在调试模式下运行,你唯一能做的就是在调试时向JVM传递一个参数。
马努

o4hqfura

o4hqfura7#

如果使用套接字(例如9999),您可以调用netstat来检查连接是否已建立:

Process p = new ProcessBuilder("netstat", "-n").start();
String stdout = IOUtils.toString(p.getInputStream(), Charset.defaultCharset());

然后在标准输出中扫描127.0.0.1:9999。* 已建立

相关问题