如何在“运行”模式下编写在“调试”模式下运行时不同的代码(例如在eclipse中调用为“Debug As Java Application”)(例如,作为“Run as Java Application”调用)在eclipse“)?例如,代码可以在”Debug As Java Application“时打印”Haha,你在调试“但在”Run as Java Application“时不打印(我不想附加任何args)在调用main方法时)。是否有任何通用方法可以在任何IDE下工作,如eclipse,IntelliJ等?
答案 0 :(得分:7)
我已将此实现如下。我检查JVM参数并查找-Xdebug
的参数。请参阅代码。
private final static Pattern debugPattern = Pattern.compile("-Xdebug|jdwp");
public static boolean isDebugging() {
for (String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
if (debugPattern.matcher(arg).find()) {
return true;
}
}
return false;
}
它适用于我,因为eclipse执行被调试为独立进程的应用程序并使用JDI(Java调试接口)连接到它。
我很高兴知道这是否适用于其他IDE(例如IntelliJ)
答案 1 :(得分:1)
这些模式之间的区别在于,在 debug 模式下,IDE将通过调试器(通常通过二进制套接字)连接到刚刚执行的应用程序。附加调试器允许IDE发现被击中的断点,抛出异常等。这不会发生在正常模式中。
没有标准且易于使用的方法来区分调试和普通模式与Java代码。