一尘不染

如何确定是否启用了“调试模式”

java

Java程序如何找出它是否在调试模式下运行?

在常规的“全速”模式下,应用程序的行为应与“调试模式”下(在连接调试器时,在调试模式下运行)的行为有所不同。该应用程序通过TCP与另一台计算机,另一进程或自身内部进行通信。我的同事希望我们Socket.setSoTimeout(1000)默认使用,以便从套接字读取最多可以阻塞1秒钟。调试时,这当然是不够的,并且应用程序将停止正常运行。因此,一种解决方案是设置SO_TIMEOUT较高的值,但仅在调试模式下使用(例如:无限制)。现在,我并不总是设置断点,也不希望使用可以自行设置“
debug”属性的调试版本。有时我会连接调试器(远程调试)。我主要使用Eclipse,因此可以在其中正常使用的解决方案。

可能的答案包括:

  1. 要了解是否以调试模式运行,请在java.lang.management.*javax.management.*…中使用以下方法。

  2. 您的同事由于X原因而错了SO_TIMEOUT,默认情况下您不应将其设置为1秒。

更新资料

我了解系统属性方法,但是我有待解决最初的问题。


阅读 253

收藏
2020-09-08

共1个答案

一尘不染

我现在自己发现了:

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

这将检查是否使用了Java调试线协议代理。

2020-09-08