如果VM正在调试,如何从Java代码中了解?

时间:2012-10-02 07:57:11

标签: java debugging

我希望有这样的东西:

long timeout = isDebugModeActive() ? Long.MAX_VALUE : 10000;

因此,当调试器在断点处停止时,不会发生超时。

是否有任何API或系统/环境属性可以找到它?

4 个答案:

答案 0 :(得分:2)

this thread的作者找到了这个解决方案:

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

标准免责声明似乎是合适的 - 这非常脆弱(因为它在触发时非常具体)并且可能导致Heisenbugs(当您尝试时不会出现错误调试)。对于许多场景,系统属性或环境变量可能更好。

答案 1 :(得分:1)

您可以进行新的运行配置(运行 - >运行配置)并在那里添加环境变量或系统属性。

答案 2 :(得分:1)

如果您开发RCP应用程序,您可以使用:

if(Platform.inDevelopmentMode()) {
   // ....
}

答案 3 :(得分:1)

可以通过检查启动程序的JVM参数来实现。

你会看到:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=[port]

然后检查端口正在侦听或有连接。