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

Ser*_*ipc 37 java eclipse debugging logging

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

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

top*_*ard 53

找到了如何启用if-to-out-if-debug-mode-enabled的答案

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

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

  • boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments()的toString()包含( " - agentlib:JDWP");.. (14认同)
  • @FrankMeulenaar 这是非常特定于供应商的。这很好,只要你知道。 (2认同)
  • 请注意,一些debuger仍然使用旧的参数`-Xrunjdwp`,我已经使这个代码查找两个JVM args. (2认同)

kgi*_*kis 21

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

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


Tho*_*sen 7

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

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

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

  • 有时您不关心将来的代码,您只需要立即能够调试它,正常情况就可以正常工作。 (2认同)

J-1*_*DiZ 5

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

将其作为VM参数传递

-Ddebug=true
Run Code Online (Sandbox Code Playgroud)

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

  • Boolean.getBoolean("debug") 很愚蠢,因为它尝试将字符串“debug”转换为 bool,这总是导致 false。 (3认同)